Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 与子类的动态绑定;“未找到合适的方法”;_Java_Oop_Dynamic Binding - Fatal编程技术网

Java 与子类的动态绑定;“未找到合适的方法”;

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)); } } 到 导致“未找到适合填充的方法”错误。 如何删除“

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));
    }

}

导致“未找到适合填充的方法”错误。 如何删除“实例”开关?
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));
}
并且对class
C
执行几乎相同的操作

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);
}