父类的子类的 Java 模式匹配

索内约什

我有一个Parent班级和一个extends Parent名为Child. 我有一个run可以采用 aParentChildinstance 的方法。Child使用代码创建了一个实例Parent child = new Child()请参阅下面的代码。

我希望代码输出“你是孩子”,但我收到“你是父母”。我明白这背后的原因,但我不知道我会用什么来使Child的实施run执行。

在我的系统中,我将有多个继承自的“子”类Parentrun满足每个“子”类的多个方法。因此,转换将不起作用,因此如果您在解决方案中包含转换,恐怕它对我没有帮助。我对此的灵感或多或少来自 Haskell 等语言中的模式匹配。

public class Child extends Parent {
    public static void main(String[] args) {
        Parent child = new Child();
        run(child);
    }

    public static void run(Child child) {
        System.out.println("You are a child");
    }

    public static void run(Parent parent) {
        System.out.println("You are a parent");
    }
}
亡灵

调用哪个方法的评估是编译的一部分。在您的代码中,您将 存储new Child为一个Parent变量,因此从编译器的角度来看,它只知道您有一个Parent,因此它会解析对该方法的调用。

如果您希望显示“You are a child”,则需要将变量声明为 a Child,或者使用一种方法对类型进行一些运行时检查(类似于if (item instanceof Child) { ... })。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章