java - 多态性:从父类(super class)变量调用子类方法

标签 java polymorphism

在 Java 中,当要执行一个方法时,首先会在对象的真实类(定义对象的真实类型)中搜索它的声明。如果未找到,则检查父类(super class)。如果在那里也没有找到,则检查下一个父类,依此类推。但是,请看下面的示例:

   SuperClass s = new SubClass(list of parameter);
   s.someMethodExistOnlyInSubClass();

这会给我一个编译时错误。我以为,如前所述,它会先在SubClass中寻找someMethodExistOnlyInSubClass(),验证那里存在,然后马上执行。如果我使用 SuperClass 类型的变量来引用 SubClass 的实例,一些参数将通过调用 SuperClass 的构造函数 super() 并且对象将在那里被实例化。在这种情况下,剩下的参数去哪儿了?

最佳答案

通过将对 SubClass 实例的引用分配给 SuperClass 类型的变量,该变量被视为引用了 SuperClass 实例。因此,它不知道 SubClass 中具体声明的任何方法。但请注意,在 SubClass 中执行的覆盖仍然有效。

在您描述的上下文中,要访问 someMethodExistOnlyInSubClass(),您必须将 s 转换为 SubClass 类型。看下面:

((SubClass) s).someMethodExistOnlyInSubClass();

关于java - 多态性:从父类(super class)变量调用子类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52473250/

相关文章:

JAVA - 正则表达式模式不匹配。 regex101.com 中的匹配项

java - 解释一下java访问内部类的方法?

c++ - C++ 中的模板特化和函数重载

java - 有没有办法在基类中使用重写函数? ( java 语)

没有应用服务器的 Java EE

java - 当我已经声明了该方法时,获取类中未找到的方法?

java - do..while + switch/case 语句中仅验证正数

c++ 多态性——使用基指针访问派生函数

c# - 为什么我不能紧凑地使用我想要的 C# 多态性?

C++多态性需要帮助