嘿,我正在尝试调用子类方法(ChildClass扩展了超类())
SuperClass s=new ChildClass();
s.childClassMethod();
它没有看到ChildClass方法,我只能调用SuperClass()中的方法,我知道这可能是一个愚蠢的问题,但无论如何干杯
父母对孩子拥有的任何新方法一无所知。
public class SuperClass {
// I have no method named "childClassMethod"...
}
public class ChildClass {
public void childClassMethod() {
// Do something.
}
}
SuperClass
不知道child ClassMethod()
。您必须为两个类提供一个接口,或将该方法添加到父类并在子类中覆盖它。
或者,您可以像其他人所建议的那样简单地将对象强制转换为子类,但这可能不安全。
((ChildClass) s).childClassMethod()
没错,你看不到它,因为s是类型超类,它没有这个方法-这显然打破了多态性原则。
因此,您要么必须更改代码,例如((ChildClass)s). ChilClassMethod();
或将s
设为ChildClass
类型。
超类 子类
问题内容: 假设我有以下两个课程 如果我启动一个beta类型的新对象,如何执行在alpha类而不是beta中找到的逻辑?我可以使用<-我想知道是否可行。 Eclipse IDE中的自动键入功能使我可以选择从class 或class中进行选择。 问题答案: 你可以做: 注意,这是对父级的引用,但是super()是它的构造函数。
我想用PHP在我的简单ORM中实现一个钩子系统: 这会导致一个致命错误: 致命错误:调用私人方法付款::before_save()从上下文'记录'中 有道理。 我可以将范围更改为public,但这似乎很难看:在保存()之前,除了支付之外,没有人与
我有一个扩展了B类的a类。 A是这样定义的,它也覆盖了B的方法: B是这样定义的: 因此,如果我初始化A的一个对象,构造函数将调用调用方法doSomething()的超类之一。但哪一个会被处决?B的实现还是A中被重写的实现?
我正在编写一个带有对象的游戏,我想根据它的类使用不同的命令。我有一个超级类“项目”,一个子类“工具扩展项目”和“锤子扩展工具”。在项目超类(抽象)中,我有一个抽象方法“doCommand”,我在工具中覆盖了它。这很好用,我现在在工具中有一个有效的“doCommand”。但是当我想在 Hammer 中覆盖这个“doCommand”时,它只是使用工具的“doCommand”。 这来自调用方法的类的一部
我有以下类(请注意,方法是静态的): 当我打电话的时候: 我想得到输出: