如何从派生类外部调用超方法(即:toString())

2022-09-03 17:13:28

存在问题

如果我有一个类层次结构,例如:

public class TestSuper {
    public static class A {
        @Override
        public String toString() { return "I am A"; }
    }
    public static class B extends A {
        @Override
        public String toString() { return "I am B"; }
    }
    public static void main(String[] args) {
        Object o = new B();
        System.out.println( o ); // --> I am B
        // ?????? // --> I am A 
    }
}    

从 main 方法中,当实例的类型为 B 时,是否可以调用 A 的 toString ???

当然,像o.super.toString()这样的东西不会编译...


答案 1

你不能,而且非常故意:它会破坏封装。

假设您有一个类,它使用一种方法来验证某些业务规则的输入,然后调用超类方法。如果调用方可以忽略重写,这将使类几乎毫无意义。

如果你发现自己需要这样做,重新审视你的设计。


答案 2

您可以添加另一个方法来调用超级字符串。像这样:

public string getSuperString(){
    return super.toString();
}

推荐