Абстрактный класс в 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
abstract
ключевое слово используется для создания абстрактного класса в Java.- Абстрактный класс в Java не может быть инстанциирован.
- Мы можем использовать ключевое слово
abstract
для создания абстрактного метода, у абстрактного метода нет тела. - Если у класса есть абстрактные методы, то класс также должен быть абстрактным с использованием ключевого слова abstract, в противном случае он не будет компилироваться.
- Не обязательно, чтобы у абстрактного класса был абстрактный метод. Мы можем пометить класс как абстрактный, даже если он не объявляет ни одного абстрактного метода.
- Если у абстрактного класса нет реализации метода, лучше использовать интерфейс, потому что в Java нет поддержки множественного наследования классов.
- Подкласс абстрактного класса в Java должен реализовать все абстрактные методы, если только подкласс также не является абстрактным классом.
- Все методы в интерфейсе являются неявно абстрактными, если только методы интерфейса не являются статическими или по умолчанию. Статические методы и методы по умолчанию в интерфейсах были добавлены в Java 8, для получения более подробной информации читайте Изменения интерфейса Java 8.
- Абстрактный класс Java может реализовывать интерфейсы даже без предоставления реализации методов интерфейса.
- Абстрактный класс Java используется для предоставления общей реализации методов всем подклассам или для предоставления реализации по умолчанию.
- Мы можем запустить абстрактный класс в Java так же, как любой другой класс, если у него есть метод
main()
.
Это все, что касается абстрактного класса в Java. Если я упустил что-то важное, пожалуйста, дайте нам знать в комментариях.
Source:
https://www.digitalocean.com/community/tutorials/abstract-class-in-java