有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

下面的逻辑是所有三个类AppleLeaf、MangoLeaf和BananaLeaf extend 叶类。我有一个只接受叶子对象的方法。它应该根据类类型正确地将我重定向到下面的方法。 但我得到的错误是,“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) 个答案

  1. # 1 楼答案

    你不能像那样自动向上投射。您需要的是动态方法绑定,而不是Java。Java是一种与compiletime链接的语言,因此它不会编译/运行

  2. # 2 楼答案

    这不是它的工作原理。您已经定义了三个方法,其中没有一个将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类中定义一个抽象方法,让每个叶类型在自己的方法定义中处理自己