gpt4 book ai didi

java - 继承问题: Results are different on creating same class object

转载 作者:行者123 更新时间:2023-12-01 17:55:26 25 4
gpt4 key购买 nike

案例1:在下面的示例中,如果我调用 a.i,它会打印 10 作为答案。但是 A a = new B();这不是像 b 的对象正在被创建一样,所以应该打印值 20 而不是 10。

class A
{
int i = 10;
}

class B extends A
{
int i = 20;
}

public class MainClass
{
public static void main(String[] args)
{
A a = new B();
System.out.println(a.i);
}
}

案例2: 另外,如果我使用类内部的方法创建与上面相同的程序,而不是像上面的情况那样打印变量值,那么结果会有所不同:

class A{

void test(){
System.out.println("hi");
}
}

class B extends A{
void test(){
System.out.println("hello");
}
}


public class Test {
public static void main(String[] args) {

A a=new B();
System.out.println(a.test);
}

现在在这种情况下打印 hi 而不是 hello ,那么为什么当我尝试打印变量值和使用方法时行为不同?覆盖仅发生在方法之间,而不是变量之间?

最佳答案

因为第一个示例中的内容与多态性无关,因为读取的字段不是动态分派(dispatch)的。

但是,您拥有的是名称阴影,因此语句 A.i 中的 i 引用了 A 中声明的字段B.i 此时是不可见的。

关于java - 继承问题: Results are different on creating same class object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45350068/

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