2015-10-27 50 views
2

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

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; 
} 
+2

请在您的描述之外添加代码片段 – Hristo

+0

所以我发现在NetBeans中,我需要通过在方法菜单打开时查看它的javaDoc来指定要调用哪个super.toString()。但是当我将我的代码交给我的教授时,这种选择是否会转移?有没有办法保证我的决定? – Jordyn

+1

请告诉我们您的代码。 –

回答

2

因此,它听起来就像你正在试图做的是创造toStrings的层次,当你有对象的图形打印。所以你所需要做的就是在超级链接被调用的时候追加超链接。 (如果我正确理解你)

这里的割草机类

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

LawnTractor

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 

的你要如何的对象在返回字符串可以取决于你如何追加他们一起重新排序显示的顺序。割草机可以是第一个或最后一个。

0

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

相关问题