Top.Mail.Ru
Ответы
Аватар пользователя
Изменено
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+3

Вопрос про ООП

В ООП есть ситуация называемая СМЕРТЕЛЬНЫЙ РОМБ СМЕРТИ. Это что-то типа этого:

12345
  -    ОТЕЦ
    /     \
ДЕД        ВНУК
    \     /
     МАТЬ 

У матери и у отца есть функция Make() и ВНУК при вызове его непонятно какую вызовет.

В java есть способ предотвратить это.
Нужно все методы сделать абстрактными и переопределить метода.
Но если мы сделаем метод абстрактным , то мы же не можем наследоваться. А если мы не сможем наследоваться то как мы можем переопределить функцию?

Переопределяется же наследованная функция.

По дате
По рейтингу
Аватар пользователя
Искусственный Интеллект

>Но если мы сделаем метод абстрактным , то мы же не можем наследоваться.
Это неверно.

Аватар пользователя
Искусственный Интеллект

а так разве не работает:

123456789101112131415161718
 abstract class Parent { 
    abstract void abstractMethod(); 
} 
 
class Child extends Parent { 
    @Override 
    void abstractMethod() { 
        System.out.println("Implementation of abstract method in Child"); 
    } 
} 
 
class GrandChild extends Child { 
    @Override 
    void abstractMethod() { 
        System.out.println("Further implementation in GrandChild"); 
    } 
} 
 
Аватар пользователя

В жабе, как и в C#, запрещено ромбовидное наследование. Так что забудь про это. Каждый класс может наследоваться только от одного класса.

Аватар пользователя
Оракул

Все правильно, кроме того, что все неправильно

Аватар пользователя
Профи

Да