Java. Урок 28. Абстрактные классы и множественное наследование

Уроки для начинающих   5 февраля 2013  Автор статьи:  

В данном уроке мы еще больше углубимся в объектно-ориентированное программирование и изучим абстрактные классы. Абстрактные классы нужны в том случае, если у вас есть метод или группа методов, которые вы не можете реализовать в данном классе, но которые могут быть написаны в классах наследниках. Такую ситуацию мы уже рассматривали в примере про фигуры: Shape(класс-родитель), Circle(наследник) и так далее. Класс Shape содержал пустой метод без реализации, в таких случаях обычно не ставят фигурные скобочки, а используют точку запятой и перед объявлением добавляют ключевое слово abstract:

public abstract class Shape {
abstract public void draw();
}

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

public class Сircle extends Shape {
public void draw() {
System.out.println("Круг");
}
}
Shape circle = new Сircle();//пример использования

Теперь пришло время поговорить о множественном наследовании в Java. Т.е о возможности быть наследником сразу двух и более классов:

public class MyPoint extends Shape, Circle{
}

Таким образом класс MyPoint является наследником двух классов Shape и Circle. У обоих классов родителей есть метод draw, очевидно что в данном случае лучше взять не абстрактный метод, но что делать, если оба класса содержат не абстрактные методы с одинаковой сигнатурой?
Из-за проблем связанных с множественным наследованием в Java его нет. Вместо него, для решения аналогичных задач придумали интерфейсы.

  • Little Fish

    наверно «и создать его объект»

    • Да, объект. У меня неудачно составлено это предложение. Но общий смысл в том, что после создания наследника уже можно создавать объекты этого класса

  • Роман

    Следующий урок http://cybern.ru/java-interface.html тоже не открывается

    • Попробуйте обновить страницу, которая не открывается.

  • Алексей

    Наследование в Java реализовано с помощью ключевого слова extends. Но в Java Вы можете в качестве родителя указать только один класс. Это очень важная особенность. Множественного наследования в Java нет! Для примера — такой код не скомпилируется

    public class MyPoint extends Shape, Circle{
    }

    Как же использовать в качестве родителей несколько классов? Через интерфейсы

    public class MyPoint implements Shape, Circle{
    }

    • Потому что интерфейсы это не наследование, а имплемитирование, то есть реализация некоторого заданного интерфейса. Например у меня есть часы марки киберн, и никакое смешение марок не доступно, можно только сделать часы следующего поколения, например cybern new, понятное дело, что CybernNew будет наследоваться от класса Cybern, потому что у нас будет преемственность поколений. Но новые часы у нас будут не только часами, но еще и будильником и радио, тогда я говори, что мой класс CybernNew(часы нового поколения) будут иметь интерфейсы радио и будильника. Таким образом древо наследование достаточно линейно, но на каждом шаге мы можем добавлять любое количество интерфейсов.

      • lilacbush

        Спасибо Вам за подробные комментарии, очень помогает.

  • -sdafsadf

    1
    dsafsdfasdf

Научиться программировать

  • на Delphi

  • на Java

  • на C++