2013-03-02 3 views
-1

если наследовать TrainCar, это проблема. если наследовать GCompoud, это хорошо. где не так?Почему подкласс, наследующий родительский класс, ошибочен?

Родитель:

public class TrainCar extends GCompound{ 

    public TrainCar(double size){ 

     engine = new Engine(size); 
     add(engine); 
     } 
} 

подкласс:

public class Engine extends TrainCar { 

    public Engine (double size){ //if inherit TrainCar that's a problem. 
            //if inherit GCompoud that's well. 

     GPolygon engine = engine(size);  
     add(engine); 
    } 
} 

Boxcar наследуют TrainCar это хорошо.

В Раздаточные # 31:

public class Boxcar extends TrainCar { 

public Boxcar(Color color) { 
} 

http://www-cs-faculty.stanford.edu/~eroberts/courses/cs106a/handouts/30-graphical-structures.pdf

+2

Вы создаете рекурсивный цикл. Создавая новый движок, он создает новый TrainCar, который создает новый движок, который создает новый TrainCar, который создает новый движок ... – Jensen

+1

Поскольку Дженсен Сомерс сказал, что вы создаете рекурсивный цикл. То, что вы пытаетесь сделать, указывает это. Сделайте это более ясным –

+0

, это не рекурсивный loop.if подкласс, наследующий GCompoud, который работает. Я не знаю, почему подкласс не может продлить родителя. – user2094097

ответ

0

Вы должны вызвать конструктор для TrainCar в конструкторе Engine. Вы можете сделать это следующим образом:

public Engine (double size) { 
    super(size); 

    GPolygon engine = engine(size);  
    add(engine); 
} 
+0

спасибо. Ввод супер (размер); после этого строка не отображает ошибку, но после запуска это неправильно. – user2094097

+0

что именно не так? – niculare

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