Java 继承可以';t调用子类方法
嘿,我正在尝试调用子类方法(ChildClass扩展了超类() 它没有看到ChildClass方法我只能调用来自超类()的方法Java 继承可以';t调用子类方法,java,inheritance,methods,Java,Inheritance,Methods,嘿,我正在尝试调用子类方法(ChildClass扩展了超类() 它没有看到ChildClass方法我只能调用来自超类()的方法 我知道这可能是一个愚蠢的问题,但无论如何,cheers编译器不知道该引用在运行时指向哪个实例,所以它只允许您在编译时访问超类的可访问方法 见 这是因为超类没有该方法 如果您希望超类能够调用该方法,则需要将其抽象并赋予该方法 子类是超类的一种形式,超类不是子类的一种形式。没错,你看不到它,因为s是类型超类,它没有这个方法-这显然违反了原则 因此,您必须更改代码,如((
我知道这可能是一个愚蠢的问题,但无论如何,cheers编译器不知道该引用在运行时指向哪个实例,所以它只允许您在编译时访问超类的可访问方法 见
- 这是因为超类没有该方法
如果您希望超类能够调用该方法,则需要将其抽象并赋予该方法
子类是超类的一种形式,超类不是子类的一种形式。没错,你看不到它,因为
s
是类型超类
,它没有这个方法-这显然违反了原则
因此,您必须更改代码,如
((ChildClass)s).childClassMethod()
或使s
成为ChildClass
类型。父级不知道子级拥有的任何新方法
public class SuperClass {
// I have no method named "childClassMethod"...
}
public class ChildClass {
public void childClassMethod() {
// Do something.
}
}
超类
不知道childClassMethod()
。您必须为这两个类提供一个接口,或者将该方法添加到父类并在子类中重写它
或者,您可以像其他人所建议的那样简单地将对象强制转换为子类,但这可能是不安全的
((ChildClass) s).childClassMethod()
我明白了,如果我在超类中创建一个空方法,它会工作吗?@user1840040是的,但是你必须使超类抽象,你也可以在超类中创建方法,然后在子类中重写它
((ChildClass) s).childClassMethod()