Абстрактный класс в Java

Абстрактный класс в Java похож на интерфейс, за исключением того, что он может содержать реализацию метода по умолчанию. Абстрактный класс может иметь абстрактный метод без тела и может иметь методы с реализацией. Ключевое слово abstract используется для создания абстрактного класса и метода. Абстрактный класс в Java не может быть инстанциирован. Абстрактный класс в основном используется для предоставления базы для подклассов, чтобы расширять и реализовывать абстрактные методы и переопределять или использовать реализованные методы в абстрактном классе.

Абстрактный класс в Java

Вот простой пример абстрактного класса в Java.

package com.journaldev.design;

//абстрактный класс
public abstract class Person {
	
	private String name;
	private String gender;
	
	public Person(String nm, String gen){
		this.name=nm;
		this.gender=gen;
	}
	
	//абстрактный метод
	public abstract void work();
	
	@Override
	public String toString(){
		return "Name="+this.name+"::Gender="+this.gender;
	}

	public void changeName(String newName) {
		this.name = newName;
	}	
}

Обратите внимание, что work() является абстрактным методом и не имеет тела. Вот пример конкретного класса, расширяющего абстрактный класс в 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[]){
		//кодирование с использованием абстрактных классов
		Person student = new Employee("Dove","Female",0);
		Person employee = new Employee("Pankaj","Male",123);
		student.work();
		employee.work();
		//использование метода, реализованного в абстрактном классе - наследование
		employee.changeName("Pankaj Kumar");
		System.out.println(employee.toString());
	}

}

Примечание, что подкласс Employee наследует свойства и методы суперкласса Person с использованием наследования в Java. Также обратите внимание на использование аннотации Override в абстрактном классе Employee. Читайте дополнительно для почему всегда следует использовать аннотацию Override при переопределении метода.

Важные моменты абстрактного класса в Java

  1. abstract ключевое слово используется для создания абстрактного класса в Java.
  2. Абстрактный класс в Java не может быть инстанциирован.
  3. Мы можем использовать ключевое слово abstract для создания абстрактного метода, у абстрактного метода нет тела.
  4. Если у класса есть абстрактные методы, то класс также должен быть абстрактным с использованием ключевого слова abstract, в противном случае он не будет компилироваться.
  5. Не обязательно, чтобы у абстрактного класса был абстрактный метод. Мы можем пометить класс как абстрактный, даже если он не объявляет ни одного абстрактного метода.
  6. Если у абстрактного класса нет реализации метода, лучше использовать интерфейс, потому что в Java нет поддержки множественного наследования классов.
  7. Подкласс абстрактного класса в Java должен реализовать все абстрактные методы, если только подкласс также не является абстрактным классом.
  8. Все методы в интерфейсе являются неявно абстрактными, если только методы интерфейса не являются статическими или по умолчанию. Статические методы и методы по умолчанию в интерфейсах были добавлены в Java 8, для получения более подробной информации читайте Изменения интерфейса Java 8.
  9. Абстрактный класс Java может реализовывать интерфейсы даже без предоставления реализации методов интерфейса.
  10. Абстрактный класс Java используется для предоставления общей реализации методов всем подклассам или для предоставления реализации по умолчанию.
  11. Мы можем запустить абстрактный класс в Java так же, как любой другой класс, если у него есть метод main().

Это все, что касается абстрактного класса в Java. Если я упустил что-то важное, пожалуйста, дайте нам знать в комментариях.

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