Classe Abstrata em Java

Classe abstrata em Java é semelhante a uma interface, exceto que pode conter a implementação de métodos 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 abstrato. Uma classe abstrata em Java não pode ser instanciada. Geralmente, uma classe abstrata é usada para fornecer uma base para subclasses estenderem e implementarem os métodos abstratos, além de sobrescreverem 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 uma classe concreta que estende 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 sempre devemos usar a anotação Override ao substituir um método.

Pontos Importantes sobre Classe Abstrata em Java

  1. abstract é usado para criar uma classe abstrata em Java.
  2. Uma classe abstrata em Java não pode ser instanciada.
  3. Podemos usar a palavra-chave abstract para criar um método abstrato, que não possui implementação.
  4. Se uma classe tiver métodos abstratos, ela também deve ser abstrata usando a palavra-chave abstract, caso contrário, não será compilada.
  5. Não é necessário que uma classe abstrata tenha 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 nenhuma implementação de método, é melhor usar uma interface, pois Java não oferece suporte à 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 Alterações na interface Java 8.
  9. Uma classe abstrata em Java pode implementar interfaces sem fornecer a implementação dos métodos da interface.
  10. Uma classe abstrata em Java é usada para fornecer implementação comum de métodos a todas as subclasses ou para fornecer uma 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 esqueci algo importante, por favor nos avise pelos comentários.

Source:
https://www.digitalocean.com/community/tutorials/abstract-class-in-java