2016-11-04 1 views
5

У меня есть простой три класса:Как пропустить один уровень в наследовании, вызывающем супер от дедушки и бабушки в java?

class A { 
    public A(int a){ } 
} 

class B extends A { 
    public B(int b){ super(b); } 
} 

class C extends B { 
    public C(int c){ super(c); } 
} 

Таким образом, порядок исполнения во время класса инстансов является C-> B-> A-> B-> C и все объекты правильно инстанцированы. Тогда вопрос:

МОГУ Я в некотором роде написать конструктор для класса C, как это:

public C(int c){ 
    super.super(c); 
    } 

Идея заключается в том, чтобы вызвать конструктор из класса, а не от непосредственного родителя B. Возможно ли это ?

+2

Ну, здесь нет методов переопределения, поэтому просто вызывайте 'A (c)'. (Я предполагаю, что это опечатка, хотя, пожалуйста, исправьте свой код, чтобы на самом деле проиллюстрировать вашу проблему). –

+2

Код даже не компилируется на данный момент, потому что вы не объявляете конструкторы - вы объявляете методы с именами такими же, как классы. –

+1

Я предполагаю, что это конструктор. Возможно, OP может подумать о своей архитектуре. – Jeremy

ответ

10

Нет, вы не можете этого сделать.

Все классы в иерархии должны быть построены. Вы не можете обход строительство B.

Что вы могли сделать, это написать protected конструктор в B, что не по существу не-оп, и называют, что из конструктора в C.

Смежные вопросы