爲什麼我無法將基類實例轉換爲派生類?Java;將基類轉換爲派生類
例如,如果我有一個擴展類C的類B,爲什麼我不能這樣做?
B b=(B)(new C());
or this?
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){...}
}
現在我想創建一個新的組類延伸基地和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){
...
}
}
所以基本上我想新的功能添加到基地和BaseNode通過擴展它們並添加一個函數給它們。此外,Base和BaseNode應該可以獨立使用。
如果可能的話,我真的很喜歡不使用泛型。
好吧,所以我最終找出了答案,部分得益於Maruice Perry的回答。
在我的構造函數Base
中,n
被實例化爲BaseNode
。我所要做的只是在構造函數的派生類中將n
重新實例化爲DerivedNode
,它完美地工作。
首先,你需要使BaseNode n;受到保護,以便派生可以看到它。 – Joel 2010-04-03 19:30:18
Woops(改變它)。 – Cam 2010-04-03 19:31:23
我的意思是沒有任何方式沒有泛型這樣做?就像我說過的,我希望基類可以按原樣使用 - 添加泛型會使它們更加麻煩,並且會刪除Base應該由Base封裝的BaseNode類的封裝。 – Cam 2010-04-03 19:43:23