В данном уроке мы еще больше углубимся в объектно-ориентированное программирование и изучим абстрактные классы. Абстрактные классы нужны в том случае, если у вас есть метод или группа методов, которые вы не можете реализовать в данном классе, но которые могут быть написаны в классах наследниках. Такую ситуацию мы уже рассматривали в примере про фигуры: Shape(класс-родитель), Circle(наследник) и так далее. Класс Shape содержал пустой метод без реализации, в таких случаях обычно не ставят фигурные скобочки, а используют точку запятой и перед объявлением добавляют ключевое слово abstract:
1
2
3
|
public abstract class Shape {
abstract public void draw();
}
|
Абстрактные методы могут содержаться только в абстрактном классе, поэтому ключевое слово abstract необходимо указать и перед ним.
Создать объект абстрактного класса нельзя, но зато его можно применять для полиморфизма, как было показано в предыдущем уроке. Т.е можно создать класс наследник, который содержит реализацию всех абстрактных методов и создать его объект.
1
2
3
4
5
6
|
public class Сircle extends Shape {
public void draw() {
System.out.println("Круг");
}
}
Shape circle = new Сircle();//пример использования
|
Теперь пришло время поговорить о множественном наследовании в Java. Т.е о возможности быть наследником сразу двух и более классов:
1
2
|
public class MyPoint extends Shape, Circle{
}
|
Таким образом класс MyPoint является наследником двух классов Shape и Circle. У обоих классов родителей есть метод draw, очевидно что в данном случае лучше взять не абстрактный метод, но что делать, если оба класса содержат не абстрактные методы с одинаковой сигнатурой?
Из-за проблем связанных с множественным наследованием в Java его нет. Вместо него, для решения аналогичных задач придумали интерфейсы.
|