2 回答

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超10個(gè)贊
需要在單個(gè)覆蓋函數(shù)中使用 instanceof Parent add(Parent p)。
在 A 類和 B 類中,需要具有以下功能:
@Override
public Parent add(Parent p){
? ? if (p instanceof A){
? ? ? ? A a = (A) p;
? ? ? ? return add(a);
? ? }
? ? else if (p instanceof B){
? ? ? ? B b = (B) p;
? ? ? ? return add(b);
? ? }
? ? else return null;
}

TA貢獻(xiàn)1874條經(jīng)驗(yàn) 獲得超12個(gè)贊
基本上你不用兩種方法來添加 A 和 B,這違反了多態(tài)性或 SOLID 原則。您可以像下面這樣構(gòu)建您的課程 -
class A extends Parent{
public A(){ setValue(1); }
public A(int x){ setValue(x); }
public A(B b){ setValue( b.getValue()); }
@Override
public A add(Parent a){ return new A( getValue()+a.getValue()); }
}
class B extends Parent{
public B(){ setValue(2); }
public B(int x){ setValue(x); }
public B(A a){ setValue(a.getValue()); }
@Override
public B add(Parent b){ return new B(getValue() + b.getValue()); }
}
因?yàn)閍dd是在Parent中定義的,所以只有一種實(shí)現(xiàn)就足夠了。在當(dāng)前場景中,因?yàn)閍ddin Class的簽名A與簽名 in 不匹配Parent,因此該方法根本沒有被覆蓋
如果您添加@Override添加方法,您就會(huì)知道。編譯器會(huì)拋出錯(cuò)誤。
希望這可以幫助。
添加回答
舉報(bào)