2013-10-27 6 views
0

Я изучаю Java в школе, и у меня возникла проблема с наследованием и конструкторами. У меня есть 3 класса, класс A, класс B и класс C. Класс A является суперклассом, класс B расширяет класс A и класс C расширяет класс B. Класс B имеет конструктор, формальный (параметр) является строкой. Все хорошо, пока здесь. Итак, теперь я расширяю класс B до класса C. В классе C мне нужно создать конструктор, в котором имеет экземпляр класса B в качестве его параметра. Затем мне нужно извлечь некоторую информацию из класса B и сохранить ее в классе C.Java: Конструктор подкласса имеет объект родительского класса

Вот код, который у нас есть.

public class B extends A { 

int b; 

public B(int b) { 
this.b=b; 
} 

} 

public class C extends B { 

int c; 

public C(B b) { 

this.c = b.b; 

} 

} 

в моей основной()

У меня есть следующий код, чтобы создать экземпляр С

С c_c = новый С (новый В (12));

Когда это скомпилировано, я получаю сообщение об ошибке. ошибка: конструктор B класса B не может применяться к заданным типам;

Причина: фактические и формальные списки аргументов различаются по длине

ли вы, ребята, быть в состоянии помочь мне понять, что я сделал не так?

+0

Вы, вероятно, забыли перекомпилировать другие файлы классов. – SLaks

ответ

2

Вы должны явно вызвать конструктор Б из конструктора C с момента конструктора не заданные по умолчанию в классе B

public C(B b) { 
    super(0); 
    this.c = b.b; 
} 
+2

Или, что более вероятно, 'super (b.b);'. – chrylis

0

Вам не нужно перезагружать информацию от B до C. Просто сделать поля B видимыми для C, например, сделать их защищаемыми

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