Classe Abstrata em Java

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

  1. abstract é usado para criar uma classe abstrata em Java.
  2. Classes abstratas em Java não podem ser instanciadas.
  3. Podemos usar a palavra-chave abstract para criar um método abstrato; um método abstrato não possui corpo.
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. 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.
  9. Uma classe abstrata Java pode implementar interfaces sem mesmo fornecer a implementação dos métodos da interface.
  10. A classe abstrata Java é usada para fornecer implementação de método comum a todas as subclasses ou para fornecer implementação padrão.
  11. 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