gpt4 book ai didi

java - OOP继承执行

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:31:23 27 4
gpt4 key购买 nike

为什么执行TestClass.main()会输出202 202 101??

class BaseClass
{
int data = 101;
public void print()
{
System.out.print(data + " ");
}
public void fun()
{
print();
}
}
class SubClass extends BaseClass
{
int data = 202;
public void print()
{
System.out.print(data + " ");
}
}
class TestClass
{
public static void main(String[] args)
{
BaseClass obj = new SubClass();
obj.print();
obj.fun();
System.out.print(obj.data);
}
}

以我贫乏的 OOP 知识,我认为执行必须是这样的:

1- obj.print();从子类打印 202

2- 因为没有 obj.fun();子类中的方法它调用父方法所以输出应该是 101

3- System.out.print(obj.data);应该打印 202,因为该值在子类中被覆盖。

所以我认为输出应该是 202 101 202 但它不是,你能解释一下为什么吗?

最佳答案

Since there is no obj.fun(); method in Subclass it calls parent method so the output should be 101

确实,它调用父类(super class)是为了fun,但是父类(super class)调用了print,并且当print被覆盖时,覆盖版本(在子类中)被调用。

System.out.print(obj.data); should print 202 since the value is overwritten in subclass.

变量不会被覆盖,而是被子类隐藏,因为obj声明为BaseClass,它直接访问它的data属性。与方法调用不同,这是在编译时决定的。

关于java - OOP继承执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10577557/

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