2015-05-05 1 views
2

Предположим, у меня есть базовый класс, который называется Vehicle, а другой класс - Car, который расширяет его. Наконец, у меня есть класс Luxury, который расширяет Car.Как вызвать метод базового класса из унаследованного класса второго уровня?

Я знаю, что я могу использовать ключевое слово super для вызова метода базового класса. Как вызвать метод класса Vehicle с Luxury?

ответ

2

Для этого не существует встроенного механизма. Вы должны создать вспомогательный метод в первом подклассе.

public class A { 
    public void myMethod() { ... } 
} 

public class B extends A { 
    public void myMethod() { 
     // something 
    } 

    protected void myMethodA() { 
     super.myMethod(); 
    } 
} 

public class C extends B { 
    public void myMethod() { 
     myMethodA(); 
    } 
} 
+0

Спасибо, он работает .. и если я могу, в соответствии с лучшей практикой, когда вы советуете мне создавать вспомогательные методы? –

+1

Я бы сделал это только по мере необходимости, и даже тогда экономно. Этот тип шаблонов нарушает принцип замещения Лискова, так как вы должны ожидать, что подкласс класса будет вести себя так же, как сам класс. Необходимость этой возможности обычно означает, что что-то нецелесообразно, но это может быть полезным решением, пока у вас не будет времени на рефакторинг. –