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

时间:2015-10-27 00:18:51

标签: java inheritance tostring super

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

xlim

2 个答案:

答案 0 :(得分:2)

所以听起来你要做的就是创建一个toStrings层次结构,当你有一个对象图时打印。所以你需要做的就是将super的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

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

答案 1 :(得分:0)

我意识到自己的错误。我的Mower类有tostring()方法,但不会覆盖toString()方法(语法上的差异)。