Respostas:
Claro.
Declarar uma classe abstrata significa apenas que você não permite que ela seja instanciada por conta própria.
Declarar um método abstrato significa que as subclasses devem fornecer uma implementação para aquele método.
Os dois são conceitos separados, embora obviamente você não possa ter um método abstrato em uma classe não abstrata. Você pode até ter classes abstratas com final
métodos, mas nunca o contrário.
Sim, você pode fazer isso. Por que você simplesmente não tenta fazer isso?
Sim você pode. A classe abstrata usada em java significa que você não pode criar um objeto da classe. E um método abstrato que as subclasses têm que fornecer uma implementação para esse método.
Assim, você pode definir facilmente uma classe abstrata sem nenhum método abstrato.
Como por exemplo :
public abstract class AbstractClass{
public String nonAbstractMethodOne(String param1,String param2){
String param = param1 + param2;
return param;
}
public static void nonAbstractMethodTwo(String param){
System.out.println("Value of param is "+param);
}
}
Isto é bom.
SIM Você pode criar uma classe abstrata sem qualquer método abstrato; o melhor exemplo de classe abstrata sem método abstrato é HttpServlet.
Método abstrato é um método que não tem corpo. Se você declarou pelo menos um método na classe, a classe deve ser declarada como um abstract é obrigatório, MAS se você declarou a classe abstrata, não é obrigatório declarar o método abstrato dentro da classe.
Você não pode criar objetos de classe abstrata, o que significa que não pode ser instanciado.
Sim, você pode declarar uma classe que não pode instanciar por si só com métodos que já possuem implementações. Isso seria útil se você quisesse adicionar métodos abstratos no futuro ou se não quisesse que a classe fosse instanciada diretamente, embora não tenha propriedades abstratas.
sim, podemos declarar uma classe abstrata sem nenhum método abstrato. o propósito de declarar uma classe como abstrata não é instanciar a classe.
então dois casos
1) classe abstrata com métodos abstratos.
esses tipos de classes, devemos herdar uma classe desta classe abstrata e deve substituir os métodos abstratos em nossa classe, ex: classe GenricServlet
2) classe abstrata sem métodos abstratos.
este tipo de classes, devemos herdar uma classe desta classe abstrata, ex: HttpServlet objetivo da classe de fazer é embora você se você não implementar sua lógica na classe filha, você pode obter a lógica pai
Sim, podemos ter uma classe abstrata sem métodos abstratos, pois ambos são conceitos independentes. Declarar uma classe abstrata significa que ela não pode ser instanciada por conta própria e só pode ser subclassificada. Declarar um método abstrato significa que o Método será definido na subclasse.
Sim, você pode fazer isso.
declarar classe abstrata significa que a classe não será instanciada por nenhuma outra classe.
e deve haver pelo menos um método abstrato dentro disso e significando que você pode declarar o método abstrato naquela classe se você não estiver declarando o método, então está ok.
exemplo:
public abstract class abs {
protected int cx = 0, cy = 0;
public void p() {
System.out.print("hello");
}
}
isso vai funcionar com certeza.
Sim você pode. Às vezes, você pode receber esta pergunta: qual é o propósito de fazer isso? A resposta é: às vezes temos que restringir a instanciação da classe por conta própria. Nesse caso, queremos que o usuário estenda nossa classe Abstract e instancie a classe filha
Sim, você pode definir uma classe abstrata sem um método abstrato. No entanto, se não houver nenhum método dentro, é melhor usar uma interface
Você pode, a questão em minha mente é mais você deveria. Desde o início, direi que não existe uma resposta dura e rápida. Faça a coisa certa para sua situação atual.
Para mim, herança implica um relacionamento 'é-um'. Imagine uma classe de cães, que pode ser estendida por subtipos mais especializados (Alsaciano, Poodle, etc). Nesse caso, tornar a classe cão abstrata pode ser a coisa certa a fazer, já que os subtipos são cães. Agora vamos imaginar que os cães precisam de uma coleira. Nesse caso, a herança não faz sentido: é um absurdo ter uma relação 'é-a' entre cães e coleiras. Este é definitivamente um relacionamento 'tem um', colar é um objeto de colaboração. Tornar a coleira abstrata apenas para que os cães possam ter uma não faz sentido.
Costumo descobrir que classes abstratas sem métodos abstratos estão realmente expressando um relacionamento 'tem-um'. Nesses casos, geralmente acho que o código pode ser melhor fatorado sem usar herança. Também acho que classes abstratas sem nenhum método abstrato costumam ser um cheiro de código e, pelo menos, devem levar a questões levantadas em uma revisão de código.
Novamente, isso é totalmente subjetivo. Pode haver situações em que uma classe abstrata sem métodos abstratos faça sentido; depende inteiramente da interpretação e da justificativa. Tome a melhor decisão para qualquer coisa em que esteja trabalhando.
Na verdade, não há como dizer se uma classe abstrata não possui nenhum método abstrato. Uma classe abstrata é como um pai. Esse pai tem algumas propriedades e comportamentos, quando você como filho quer ser filho do pai, o pai fala o filho (você) que deve ser assim, é o nosso MOTO, e se você não quiser, você não são meus filhos.
WindowDecorator
eCoffeeDecorator
sãoabstract
classes, mas nenhum inclui umabstract
método.