【问题标题】:How can I access the superclass toString method?如何访问超类 toString 方法?
【发布时间】:2021-03-29 01:57:46
【问题描述】:
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,任何帮助都会是很大的支持。

【问题讨论】:

  • 不可能

标签: java inheritance superclass


【解决方案1】:

您可能想要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 也可能有帮助。

【讨论】:

    【解决方案2】:

    基本上你不能——你不能直接访问“祖父母”,只有在父母允许的情况下才能访问。

    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() {...}
    

    【讨论】:

    • 显然无法拨打commonReusableMethod()
    • @MartinZeitler - 你是什么意思? \n 周围有一个小错字 - 我已经修复了,除此之外 - 这段代码应该可以运行(我已经通过 Java 8 安装验证)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-05
    • 1970-01-01
    • 2018-09-28
    • 2019-08-03
    • 2013-03-14
    • 2021-09-19
    相关资源
    最近更新 更多