2 回答
TA贡献1815条经验 获得超10个赞
需要在单个覆盖函数中使用 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贡献1874条经验 获得超12个赞
基本上你不用两种方法来添加 A 和 B,这违反了多态性或 SOLID 原则。您可以像下面这样构建您的课程 -
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()); }
}
因为add是在Parent中定义的,所以只有一种实现就足够了。在当前场景中,因为addin Class的签名A与签名 in 不匹配Parent,因此该方法根本没有被覆盖
如果您添加@Override添加方法,您就会知道。编译器会抛出错误。
希望这可以帮助。
添加回答
举报