gpt4 book ai didi

java - java虚拟方法调用有什么用?

转载 作者:行者123 更新时间:2023-11-30 07:16:42 25 4
gpt4 key购买 nike

假设我有以下代码

public class A {
public void callme() {
System.out.println("Calling of class A function ");
}
}

public class B extends A {
public void callme() {
System.out.println(" Calling of class B fuction ");
}

public void Hello() {
System.out.println("hello guys");
}
}

和一个执行以下操作的 main()

public class Main {
public static void main(String [] args){
A a = new B();
B b = new B();

b = (B)a;
a.callme();
b.callme();
a.Hello(); // show error : Hello is undefined for method A
}
}

书上说“你会得到与运行时变量引用的对象相关的行为”。好的,当调用方法 callme 时,我得到了 B 类的行为,但是当我访问方法 Hello 时,它显示错误,Hello is undefined for method A。这是为什么?

最佳答案

多态性不是这样工作的。由于A是B的父级,B可以继承A的方法(就像儿子可以继承父亲的属性一样),但反之则不然,因为A不知道哪些类继承了它(A不知道谁是它的 child 。)

例如,假设还有一个 C 类:

public class C extends A {
public void callme(){

System.out.println(" Calling of class C fuction ");
}

public void Hello(){

System.out.println("hello guys, I am C");
}
}

现在,如果你使用

a.Hello();

a 如何知道它应该调用哪个子类,因为它不知道其子类的方法。只有它自己的抽象方法,它知道 child 肯定会实现它。

关于java - java虚拟方法调用有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38264035/

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