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。