A classe abstrata em Java é semelhante à interface, exceto que pode conter uma implementação de método padrão. Uma classe abstrata pode ter um método abstrato sem corpo e também pode ter métodos com implementação. A palavra-chave abstract
é usada para criar uma classe e método abstratos. Uma classe abstrata em Java não pode ser instanciada. Uma classe abstrata é principalmente usada para fornecer uma base para subclasses estenderem e implementarem os métodos abstratos e substituírem ou usarem os métodos implementados na classe abstrata.
Classe Abstrata em Java
Aqui está um exemplo simples de uma Classe Abstrata em Java.
package com.journaldev.design;
//classe abstrata
public abstract class Person {
private String name;
private String gender;
public Person(String nm, String gen){
this.name=nm;
this.gender=gen;
}
//método abstrato
public abstract void work();
@Override
public String toString(){
return "Name="+this.name+"::Gender="+this.gender;
}
public void changeName(String newName) {
this.name = newName;
}
}
Observe que work()
é um método abstrato e não tem corpo. Aqui está um exemplo de classe concreta estendendo uma classe abstrata em Java.
package com.journaldev.design;
public class Employee extends Person {
private int empId;
public Employee(String nm, String gen, int id) {
super(nm, gen);
this.empId=id;
}
@Override
public void work() {
if(empId == 0){
System.out.println("Not working");
}else{
System.out.println("Working as employee!!");
}
}
public static void main(String args[]){
//codificando em termos de classes abstratas
Person student = new Employee("Dove","Female",0);
Person employee = new Employee("Pankaj","Male",123);
student.work();
employee.work();
//usando método implementado na classe abstrata - herança
employee.changeName("Pankaj Kumar");
System.out.println(employee.toString());
}
}
Note que a subclasse Employee herda as propriedades e métodos da superclasse Person usando herança em Java. Observe também o uso da anotação Override na classe Employee. Leia mais sobre por que devemos sempre usar a anotação Override ao substituir um método.
Pontos Importantes sobre Classes Abstratas em Java
abstract
é usado para criar uma classe abstrata em Java.- Classes abstratas em Java não podem ser instanciadas.
- Podemos usar a palavra-chave
abstract
para criar um método abstrato; um método abstrato não possui corpo. - Se uma classe tiver métodos abstratos, a classe também deve ser abstrata usando a palavra-chave abstract, caso contrário, não será compilada.
- Não é necessário para uma classe abstrata ter métodos abstratos. Podemos marcar uma classe como abstrata mesmo que não declare nenhum método abstrato.
- Se uma classe abstrata não tiver implementação de método, é melhor usar uma interface, porque Java não suporta herança de múltiplas classes.
- A subclasse de uma classe abstrata em Java deve implementar todos os métodos abstratos, a menos que a subclasse também seja uma classe abstrata.
- Todos os métodos em uma interface são implicitamente abstratos, a menos que os métodos da interface sejam estáticos ou padrão. Métodos estáticos e métodos padrão em interfaces foram adicionados no Java 8, para mais detalhes leia as alterações na interface do Java 8.
- Uma classe abstrata Java pode implementar interfaces sem mesmo fornecer a implementação dos métodos da interface.
- A classe abstrata Java é usada para fornecer implementação de método comum a todas as subclasses ou para fornecer implementação padrão.
- Podemos executar uma classe abstrata em Java como qualquer outra classe se ela tiver o método
main()
.
Isso é tudo para uma classe abstrata em Java. Se eu perdi algo importante, por favor, nos avise através de comentários.
Source:
https://www.digitalocean.com/community/tutorials/abstract-class-in-java