Java 与子类的动态绑定;“未找到合适的方法”;
B延伸A,C延伸A 正在尝试更改:Java 与子类的动态绑定;“未找到合适的方法”;,java,oop,dynamic-binding,Java,Oop,Dynamic Binding,B延伸A,C延伸A 正在尝试更改: public void convertA(A a) { AClass clazz = new AClass(); if (a instanceof B) { clazz.setX(convertBtoX(a)); } else if (a instanceof C) { clazz.setY(convertCtoY(a)); } } 到 导致“未找到适合填充的方法”错误。 如何删除“
public void convertA(A a) {
AClass clazz = new AClass();
if (a instanceof B) {
clazz.setX(convertBtoX(a));
} else if (a instanceof C) {
clazz.setY(convertCtoY(a));
}
}
到
导致“未找到适合填充的方法”错误。
如何删除“实例”开关?
A、B、C是对象的数据传输,不应该知道X、Y和反之亦然,因此我不能简单地将填充方法添加到A、B、C类中 建议?
fill(a)
不会自动匹配B和C参数,而是查找fill(a)
要解决您的问题,请尝试下面的方法
首先在类a
中创建一个抽象函数void fill(AClass c)
在类B
中创建此函数:
public void fill(AClass clazz){
clazz.setX(convertBtoX(this));
}
并且对classC
执行几乎相同的操作
public void fill(AClass clazz){
clazz.setY(convertCtoY(c));
}
然后按如下方式使用:
void convertABis(A a){
AClass clazz = new AClass();
a.fill(clazz);
}
我认为问题在于
A
不是B
或C
的子类,而是B
和C
是A
的子类。因此,将类型为A
的对象传递给方法fill
是不可能的。“A、B、C是对象的数据传输,不应该知道xy和viceversa,所以我不能简单地将fill方法添加到A、B、C类。”
void convertABis(A a){
AClass clazz = new AClass();
a.fill(clazz);
}