繁体   English   中英

如何从父类而不是超类调用重写的方法?

[英]How to call an overridden method from a parent class and not the super class?

我有一个抽象类 Mower,它覆盖了 toString() 方法。 草坪拖拉机类扩展了割草机。 它覆盖 toString() 方法并调用 super.toString() 作为方法的第一行。 然后我有一个 Commercial 类,它扩展了 LawnTractor 并覆盖了 toString(),也在它的第一行调用了 super.toString()。 当实例化一个 Commercial 对象(声明为 Mower 对象)并调用它的 toString() 时,我希望它打印 Mower 和 Lawn Tractor 的两个属性,然后打印它自己的属性。 相反,它只打印来自 Mower 的属性,然后打印它自己的属性。 如何调用或覆盖 Commercial 中的 toString() 方法,以便它调用其父类 (LawnTractor) toString() 而不仅仅是超类 (Mower)。

public abstract class Mower {
   private String manufacturer;
   private int year;
   private String serialNumber;

   public String tostring(){
       String temp = "Manufacturer: " + getManufacturer() + "\nYear: " + getYear() + "\nSerial Number:" + getSerialNumber() + "\n";
       return temp;
   }
}
public class LawnTractor extends Mower{
   private Engine engine = new Engine();
   private String model;
   private double deckWidth;

   public LawnTractor(){
      super();
   }

   public String toString(){
      String temp = super.tostring() + "Engine:\n" + getEngine().toString() + "\nModel: " + getModel() + "\nDeck Width: " + getDeckWidth() + "\n";
      return temp;
}
public class CommercialMower extends LawnTractor {
    private double operatingHours;
    private boolean zeroTurnRadius;

    public CommercialMower(){
       super();
    }
    public String toString(){
       String temp = super.toString() + "Operating Hours: " + getOperatingHours() + "\nZero Turn Radius: " + isZeroTurnRadius() + "\n";
       return temp;
}

因此,听起来您正在尝试创建一个 toStrings 层次结构,以便在您拥有对象图时进行打印。 所以你需要做的就是在 super 的 toStrings 被调用时附加它们。 (如果我理解正确的话)

这是割草机类

public class Mower {
    @Override
    public String toString() {
        return "Mower toString\n";
    }
}

草坪拖拉机

public class LawnTractor extends Mower {
    @Override
    public String toString() {
        String superString = super.toString();
        return superString + "LawnTractor toString\n";
    }
}

商业的

public class Commercial extends LawnTractor {
    @Override
    public String toString() {
        String superString = super.toString();
        return superString + "Commercial toString\n";
    }
}

运行它的主类。 请参阅下面的输出。 这是你要去的地方吗?

public class Main {
    public static void main(String[] args) {
        Mower mow = new Commercial();
        System.out.println(mow.toString());

    }
}

这是你的输出。 我相信这就是你要找的。 如果不是请说明

Mower toString
LawnTractor toString
Commercial toString

您希望对象在返回字符串中显示的顺序可以根据您将它们附加在一起的方式重新排序。 割草机可以是第一个或最后一个。

我意识到了我的错误。 我的割草机类有 tostring() 方法,但没有覆盖 toString() 方法(语法不同)。

暂无
暂无

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

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