2015-09-07 3 views
0

У меня есть два субъекта в этой структуре:Java - не может бросить в дочернем классе

class Parent{ 
    public int type; 
    //Setters and getters 
} 

class Child1 extends Parent{ 

} 

У меня есть экземпляр Parent, и я хочу, чтобы бросить его на Child1 основе при условии, таким образом:

Parent parent = ... 
if(parent.getType() == 1) 
    Child1 child = (Child1) parent; 

Но это дает мне ClassCastException. Как я могу решить эту проблему? Каков наилучший способ использования downcasting в java?

+0

Проверить принцип LSP https://en.wikipedia.org/wiki/Liskov_substitution_principle –

+1

Я предполагаю, что вы задаете тип 1 в конструкторе Child1? Это достаточно разумная деталь, если это так. –

+0

Почему вы не хотите использовать 'instanceof Child1' в качестве вашего условия? –

ответ

2

Вы не можете использовать объект родительского типа в объект дочернего типа. Вы неправильно поняли поведение наследования.

0

Можете ли вы отличить Класс животных для собак класса? Хотя вы знаете, что есть еще много примеров животных. Его просто собака - один из видов животных, поэтому вы можете бросить его животному, но собака не животное.

0

Вы должны использовать:

Parent parent = new Child1(); 
1

Литая к классу ребенка возможно только в случае, если объект уже является этого типа.

Листинг объекта не изменяет объект класса класса. Он просто сообщает компилятору, что «этот объект фактически является экземпляром дочернего класса, использует его как таковой». (Влияния примитивных типов различны, они фактически изменяют тип значения!)

В вашем примере кода вы не показываете, как создается объект parent, поэтому я не знаю, действительно ли это проблема , Возможно, вы можете добавить недостающий код, чтобы сделать это понятным.

0

Вы не создали объект должным образом, создайте объект Родительский ребенок = новый Child1();

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