java - 如何调用 super 方法(即 : toString()) from outside a derived class

标签 java compiler-construction

存在问题

如果我有这样的类层次结构:

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() 这样的东西不能编译......

最佳答案

你不能,而且是故意如此:它会破坏封装。

假设您有一个类,它使用一种方法来根据某些业务规则验证输入,然后调用父类(super class)方法。如果调用者可以忽略重写,这将使该类变得毫无意义。

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

关于java - 如何调用 super 方法(即 : toString()) from outside a derived class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6386343/

相关文章:

java - 排除 Oracle 故障 - 挂起的进程

javascript - 如何使用递减运算符解析表达式(例如 "c--")?

php - 用于创建 php 扩展的 VC 编译器版本

sqlite - SQLite源代码parse.y-nm

java - hibernate : C3p0 pool configuration slowing down entire server.

java - Java 和 Android 的代码解释器和运行器

java - Spring AOP : Aspect triggering when configuration is in Servlet context, 但不是应用程序上下文?

java - Android RecyclerView 和 onBindViewHolder

c++ - 是否可以使用 clang 自动包含缺少的 c++ 头文件?

c++ - 我的编译器应该针对哪些后端语言?