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

时间:2015-03-13 09:10:26

标签: 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 convertAbis(A a) {

    AClass clazz = fill(a); //ERROR NO SUITABLE METHOD FOUND FOR FILL

}


public AClass fill(B b) {
     clazz.setX(convertBtoX(b));
}

public AClass fill(C c) {
    clazz.setY(convertCtoY(c));
}

导致“找不到合适的填充方法”错误。 我怎么能删除“实例”开关? A,B,C是数据传输对象,不应该知道X Y,反之亦然,所以我不能简单地将填充方法添加到A,B,C类

建议?

2 个答案:

答案 0 :(得分:1)

fill(a)不会自动匹配B和C参数,但会查找fill(A a)

要解决您的问题,请尝试以下操作。

首先在班级void fill(AClass c)中创建一个抽象函数A

在班级B中创建此功能:

public void fill(AClass clazz){
    clazz.setX(convertBtoX(this));
}

与班级C几乎相同。

public void fill(AClass clazz){
    clazz.setY(convertCtoY(c));
}

然后使用:

void convertABis(A a){
     AClass clazz = new AClass();
     a.fill(clazz);
}

答案 1 :(得分:1)

我认为问题是A不是BC的子类,但BC是{的子类{1}}。因此,将A类型的对象传递给方法A是不可能的。