簡體   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