重载一个采用基类的方法并指导扩展类方法实现

时间:2016-08-12 18:09:07

标签: java extends overloading

下面的逻辑是AppleLeaf,MangoLeaf和BananaLeaf三个类的扩展 叶班。我有一个只接受叶子对象的方法。它应该根据类类型正确地将我重定向到下面的方法。 但是我得到了错误,"类型main中的方法handleLeaf(AppleLeaf)不适用于参数(Leaf)"

public void main(String args[]){

      for (Leaf leaf : leafList) {
      handleLeaf(leaf);     
   }
}

private void handleLeaf(AppleLeaf node) {   
    String colour = leaf.getColour();
    System.print.out(colour);
}

private void handleLeaf(MangoLeaf mLeaf) {
     Int veins = mLeaf.getVeinCount;
     System.print.out(veins);
}

 private void handleLeaf(BananaLeaf bLeaf) {    
    Boolean withered = bLeaf.getTexture();
}

2 个答案:

答案 0 :(得分:1)

这不是它的工作原理。您已经定义了三种方法,其中没有一种方法将Leaf作为参数。每个都采用Leaf的子类,但我们不知道给定参数可能是Leaf的哪个子类。

一种解决方法是创建一个委托方法,例如:

private void handleLeaf(Leaf leaf) {
    if(leaf instanceof AppleLeaf)
        handleLeaf((AppleLeaf)leaf);
    else if(leaf instanceof MangoLeaf)
        handleLeaf((MangoLeaf)leaf);
    ...//And so on
}

但是,您可以考虑重新修改逻辑。也许你可以翻转来定义Leaf类中的抽象方法,并让每个叶子类型在它自己的方法定义中处理它自己。

答案 1 :(得分:0)

你不能像那样自动转发。您正在寻找的是动态方法绑定,而不是Java。 Java是一种编译时链接语言,因此它不会编译/运行。