微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何访问超类 toString 方法?

如何解决如何访问超类 toString 方法?

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";
    }
    
}

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

解决方法

基本上你不能 - 你不能直接访问“祖父母”,只有在允许你这样做的情况下才能通过父母访问。

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

现在实际上如果你需要这个功能(让我们假设它不是 toString 而是一些所有孩子都需要的代码,你可以执行以下操作:

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 也可能有所帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。