inheritance不能调用子类方法

嘿我正在尝试调用子类方法(ChildClass扩展SuperClass())

SuperClass s=new ChildClass(); s.childClassMethod(); 

它没有看到ChildClass方法我可以调用的唯一方法来自SuperClass()我知道它可能是一个愚蠢的问题,但无论如何欢呼

那是对的,你看不到它,因为s是类型SuperClass ,没有这个方法 – 这显然会破坏多态性原理。

所以你要么像((ChildClass) s).childClassMethod();那样更改代码((ChildClass) s).childClassMethod(); 或者将其设为ChildClass类型。

编译器不知道此引用在运行时将指向哪个实例,因此它只允许您在编译时访问超类的可访问方法

看到

  • 多态性

父母对孩子拥有的任何新方法一无所知。

 public class SuperClass { // I have no method named "childClassMethod"... } public class ChildClass { public void childClassMethod() { // Do something. } } 

SuperClass不了解childClassMethod() 。 您必须为这两个类提供接口,或者将该方法添加到父级并在子级中覆盖它。

或者,您可以像其他人建议的那样简单地将对象强制转换为子类,但这可能是不安全的。

 ((ChildClass) s).childClassMethod() 

那是因为超类没有那种方法。

如果您希望超类能够调用该方法,则需要将其设计为抽象并为其提供该方法。

子类是超类的一种forms,超类不是子类的一种forms。