繁体   English   中英

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

[英]To overload a method taking a base class and directing the extending classes method implementation

下面的逻辑是AppleLeaf,MangoLeaf和BananaLeaf扩展Leaf类的所有三个类。 我有一个只接受叶对象的方法。 它应该根据类类型正确地将我重定向到下面的方法。 但是我收到错误消息,例如“类型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();
}

这不是很有效。 您已经定义了三种方法,没有一种以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类中定义一个抽象方法,并使每种叶子类型在其自己的方法定义中进行处理。

您不能像这样自动上架。 您正在寻找的是动态方法绑定,这不是Java中的。 Java是一种编译时链接的语言,因此它将无法编译/运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM