当前位置: 首页 > 知识库问答 >
问题:

继承无法调用子类方法

阎涵容
2023-03-14

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

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

它没有看到ChildClass方法,我只能调用SuperClass()中的方法,我知道这可能是一个愚蠢的问题,但无论如何干杯

共有3个答案

雷曜灿
2023-03-14

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

public class SuperClass {
    // I have no method named "childClassMethod"...
}

public class ChildClass {
    public void childClassMethod() {
        // Do something.
    }
}

SuperClass不知道child ClassMethod()。您必须为两个类提供一个接口,或将该方法添加到父类并在子类中覆盖它。

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

((ChildClass) s).childClassMethod()
裴翰学
2023-03-14

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

看见

  • 多态性
杨超
2023-03-14

没错,你看不到它,因为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”。 这来自调用方法的类的一部

  • 我有以下类(请注意,方法是静态的): 当我打电话的时候: 我想得到输出: