Почему я не могу отнести экземпляр базового класса к производному классу?
Например, если у меня есть класс B, который расширяет класс C, почему я не могу это сделать?
B b=(B)(new C());
или это?
C c=new C();
B b=(B)c;
Хорошо, позвольте мне уточнить, что я пытаюсь сделать. Вот что у меня есть:
public class Base(){
protected BaseNode n;
public void foo(BaseNode x){
n.foo(x);
}
}
public class BaseNode(){
public void foo(BaseNode x){...}
}
Теперь я хочу создать новый набор классов, которые расширяют Base и Basenode, например:
public class Derived extends Base(){
public void bar(DerivedNode x){
n.bar(x);//problem is here - n doesn't have bar
}
}
public class DerivedNode extends BaseNode(){
public void bar(BaseNode){
...
}
}
Поэтому по существу я хочу добавить новые функции в Base и BaseNode, расширив их оба и добавив функцию к обоим. Кроме того, Base и BaseNode должны быть доступны сами по себе.
Мне бы очень хотелось сделать это без дженериков, если это возможно.
Хорошо, поэтому я закончил выяснять это, отчасти благодаря ответу Маруса Перри.
В моем конструкторе для Base
, n
создается как BaseNode
. Все, что мне нужно было сделать, - это создать экземпляр n
как DerivedNode
в моем производном классе в конструкторе, и он отлично работает.