Olá amigos … tenho uma dúvida relativamente simples mas… :oops: Quando eu devo usar classe abstratas ??? digamos o seguinte uma classe abstrata tem de ter todos os métodos abstratos é isso??? e a subclasse tem de erdar os métodos abstratos… não entendi muito bem onde se encaixa este conceito sobre classses abstratas, porque é muito melhor usar interface…
Na verdade eu só preciso de uma explicação ou um exemplo e que benefícios ela pode me trazer…
Obrigado.
Não sou um Sr. Java, mas vou tentar explicar o que eu sei…
A classe abstrata além de voce ter métodos Abstratos nela, voce também pode criar métodos non-abstract
Agora se vc possui um método Abstrato em uma Classe Normal, isso da erro, entendeu a diferença né?
Quando voce tem métodos abstrato em uma classe abstrata e uma outra classe extende ela tornando-a subclasse, você terá que implementar os métodos abstratos nelas, ou pelo menos declarar eles como abstratos na subclasse também…
Uma desvantagem da classe abstrata é que voce pode extender apenas uma Classe, entao se vc ja tem uma classe que extende por exemplo JFrame, vc nao vai conseguir extender uma classe abstrata… uma solução pra isso seria na classe abstrata extender o JFrame e sua outra subclasse extender a Classe Abstrata…
Interface eu uso muito mas muito maissssssssssss que classes abstratas, acho que a vantagem de usar classe abstrata que além de voce criar métodos abstratos voce tb pode criar métodos non-abstract que podem usar nas sub-classes…
Pelo que eu entendo é isso.
[]´s
Junior
Olá
Classes abstratas podem possuir métodos abstratos e também métodos normais.
Ela pode ser usada de um modo um pouco semelhante com as interfaces. Você pode só declarar os métodos como abstratos e implementar eles na classe que herdar da classe abstrata.
O diferencial é que ela funciona, em partes, como uma classe comum onde você declara métodos e implementa eles na própria classe abstrata. Aí depois eles podem ser herdados pela classe filha sem haver necessidade de implementar de novo.
Ex.:
abstract class A {
public abstract void metodo1(); // não implementa aqui, só na filha
public void metodo2() {
System.out.println(“Metodo2() - não abstrato em A”);
}
}
public class B extends A {
public void metodo1() { // implementação do método abstrato de A
System.out.println(“Metodo1() - abstrato na classe A”);
}
public static void main(String args[]) {
B b = new B();
b.metodo1();
b.metodo2(); // herdado da classe A
}
}