java - 对子类的对象使用父类(super class)的相同方法

标签 java polymorphism

class A {
    void test() {
    }
}

class B extends A {
    void test() {
    }

 public static void main(String[] args)
{
 B b=new B();
//insert code here
}
}

如何为 B 类的对象 b 调用 A 类的 test 方法? 专门针对对象b

最佳答案

你不能从 B 的外部调用它...但是 B 中你可以这样调用它:

super.test();

这可以从 B 中的任何代码完成 - 它不必在 test() 方法本身中。例如:

public void foo() {
    // Call the superclass implementation directly - no logging
    super.test();
}

@Override void test() {
    System.out.println("About to call super.test()");
    super.test();
    System.out.println("Call to super.test() complete");
}

请注意 @Override 注释,它告诉编译器您确实确实要重写一个方法。 (撇开其他不谈,如果你在方法名称中有错别字,这将帮助你快速找到它。)

您不能从 B 外部调用它的原因是 B 重写 方法...重写的目的是替换原始行为。例如,在带有参数的方法中,B 可能希望在调用父类(super class)实现或做其他事情之前对参数做一些事情(根据自己的规则验证它)。如果外部代码只能调用 A 的版本,那将违反 B 的期望(和封装)。

关于java - 对子类的对象使用父类(super class)的相同方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15631212/

相关文章:

c++ - 如何强制子相同的虚函数首先调用其父虚函数

c# - 使用带有类型参数的工厂方法创建带有参数化构造函数的派生类

encryption - Java 应用程序和 C 应用程序与 OpenSSL 正确通信几分钟后发出 'bad record mac' 警报

java - 添加到多个其他 JPanel 时 JPanel 消失

haskell - 如何在数据类型中存储多态函数

c++ - 将派生类对象存储在基类变量中

c++ - 未找到方法 : Templates, 虚拟方法、继承、多态性

java - 新手 Android NullPointerException 故障排除

java - 如何使用 ArrayList、Java 更新文件

java - MultipleSelectionModel:哪个列表更改事件可以从 selectedIndices 中获得?