Абстрактные классы используются, чтобы создать класс с реализацией метода по умолчанию для подклассов. Абстрактный класс может иметь как абстрактные методы, так и методы с реализацией.
Чтобы создать абстрактный класс, нужно дописать ему ключевое слово abstract
при объявлении класса. Нельзя создать экземпляр абстрактного класса, поэтому такие классы являются базой для подклассов, которые реализуют абстрактные методы и переопределяют или используют реализованные методы абстрактного класса.
Вот простой пример абстрактного класса в Java.
Person.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
package ua.com.prologistic; //абстрактный класс 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 "Имя: " + this.name + "Пол: " + this.gender; } } |
Обратите внимание, что work()
это абстрактный метод без реализации.
А вот пример класса, который наследует абстрактный класс.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
package ua.com.prologistic; 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("Безработный"); }else{ System.out.println("Работник по найму"); } } public static void main(String args[]){ Person student = new Employee("Andrew","Male", 0); Person employee = new Employee("Alesya","Female", 1); // вызываем переопределенные методы student.work(); employee.work(); } } |
Обратите внимание, что подкласс Employee наследует свойства и методы суперкласса Person используя наследование в Java.
Также обратите внимание на использование аннотации Override в классе Employee. Она используется в случае переопределения метода.
Как правильно создать абстрактный класс. Важные моменты и советы
Abstract
— ключевое слово при объявлении класса.- Нельзя создать экземпляр абстрактного класса.
- Используйте ключевое слово
abstract
, чтобы создать абстрактный метод. Такой метод не имеет реализации. - Если в классе есть абстрактные методы, то класс также должен быть объявлен абстрактным с помощью ключевого слова abstract, иначе программа не будет компилироваться.
- Если в абстрактном классе нет ни одного метода с хоть какой-то реализацией, то лучше использовать интерфейс, потому что Java не поддерживает наследование нескольких классов.
- Подкласс абстрактного класса должен реализовать все абстрактные методы, если подкласс сам не является абстрактным классом.
- Все методы в интерфейсе неявно абстрактные, если методы интерфейса не статичны или по умолчанию. Статические методы и методы по умолчанию в интерфейсах добавлены в Java 8.
- Абстрактные классы могут реализовывать интерфейсы, даже не обеспечивая реализацию методов интерфейса.
- Абстрактные классы используются для обеспечения базы подклассов.
- Мы можем работать с абстрактным классом, как и с любым другим классом, если он имеет
main()
метод.
Вот и все по абстрактным классам в Java. Следите за обновлениями на Javadevblog.com
Абстрактный класс может иметь абстрактные методы как с реализацией, так и без реализации.
———
Корректнее будет сказать,
Абстрактный класс может иметь как абстрактные методы, так и методы с реализацией.
Да, Вы правы, уже исправил. Спасибо за уточнение!