如何访问超类的 toString 方法?

How can I access the superclass toString method?

public class override {

    public static void main(String[] args) {
        c1 obj = new c1();
        System.out.println(obj);
    }
}

class a1 {
    public String toString (){
        return "this is clas a";
    }
}

class b1 extends a1{
    public String toString (){
        return "this is clas b";
    }
}

class c1 extends b1{
    public String toString (){
        return super.toString() + "\nthis is clas c";
    }
    
}

我需要访问 c1 子类中的超类 a1 toString 方法。有什么办法吗。我正在学习java,任何帮助都会是一个很好的支持。

基本上你不能 - 你不能直接访问“grandparent”,只能通过 parent 如果它允许你这样做。

Class b1 有一个 toString 定义不调用 super.toString 所以它的 class b1 决定“覆盖”grandparent 的 (a1) toString 方法的功能。由于 class c1 扩展了 b1 - 你“看到”的只是这个被覆盖的版本,而不是 a1.

toString 版本

现在实际上,如果您需要这个功能(假设它不是 toString,而是所有 children 中可能需要的一些代码,您可以执行以下操作:

class a1 {
    protected String commonReusableMethod() {
        return "this is clas a";
    }
    public String toString (){
        return commonReusableMethod();
    }
}

class b1 extends a1{
    public String toString (){
        return "this is clas b";
    }
}

class c1 extends b1{
    public String toString (){
        return super.toString() + "\nthis is clas c" + "\n" +
        commonReusableMethod(); // you can call this method from here
    }
    
}

请注意 commonReusableMethod 的定义 - 它是 protected,因此您可以从层次结构中的任何地方调用它(从 a1b1c1)

如果您不想允许覆盖此受保护的方法,请同时添加 final:

protected final commonReusableMethod() {...}

您可能想要 super.super.toString()。但这在java中是不允许的。所以你可以像下面那样简单地使用它两次:

public class override {

    public static void main(String[] args) {
        c1 obj = new c1();
        System.out.println(obj);
    }
}

class a1 {
    public String toString (){
        return "this is clas a";
    }
}

class b1 extends a1{
    public String toString (){
        return "this is clas b";
    }

    public String superToString(){
        return super.toString();
    }
}

class c1 extends b1{
    public String toString (){
        return super.superToString() + "\nthis is clas c";
    }
}

This Question 也可能有帮助。