gpt4 book ai didi

java - 为什么在使用父类(super class)引用调用子类方法时会出现编译时错误?

转载 作者:行者123 更新时间:2023-11-30 06:53:09 25 4
gpt4 key购买 nike

我知道多态性发生在方法覆盖的情况下。但是我对下面的内容有点困惑。

class A {
public void hi() {
System.out.println("A "+this.getClass().getName());
}
}

class B extends A {
public void bye() {
System.out.println("B "+this.getClass().getName());
}
}

class Ideone {
public static void main (String[] args) throws java.lang.Exception {
A a = new B();
a.hi();
a.bye();
}
}

输出:

Main.java:35: error: cannot find symbol
a.bye();
^
symbol: method bye()
location: variable a of type A
1 error

为什么会出现编译时错误?

a = new B()中,B类对象是在运行时创建的,所以a是一个指向an的引用变量B 类型的对象。

现在如果我们调用B的类方法bye(),为什么会出现编译时错误?

最佳答案

a 变量在运行时可能包含类 AA 的任何子类的实例。因此,您只能为该变量调用类 A 的方法。

编译器在确定哪些方法调用有效时只关心变量的编译时类型。

关于java - 为什么在使用父类(super class)引用调用子类方法时会出现编译时错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37853463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com