gpt4 book ai didi

java - 为什么在Java中继承类中访问字段和方法的差异?

转载 作者:行者123 更新时间:2023-12-04 07:00:26 24 4
gpt4 key购买 nike

class BaseClass {
protected int filed = 1;
public void method() {
System.out.println("+ BaseClass method");
}
}

class DerivedClass extends BaseClass {
private int filed = 2;
public void method() {
System.out.println("+ DerivedClass method");
}

public void accessFiled() {
System.out.println("DerivedClass: default filed = " + filed); // output 1
System.out.println("DerivedClass: upcasting filed = " + ((BaseClass)this).filed); // output 2
}

public void accessMethod() {
System.out.println("DerivedClass: default method");
method(); // output "+ DerivedClass method"
System.out.println("DerivedClass: upcasting method");
((BaseClass)this).method(); // expecting "+ BaseClass method" but "+ DerivedClass method"
}
}

为什么对归档(数据成员)和方法的访问不同?您能从语言设计和实现细节方面向我解释吗?

谢谢。

最佳答案

发生这种情况是因为您只能 override方法,而不是字段。在 DerivedClass您隐藏变量 filedBaseClass 中声明. DerivedClass的一个实例确实有 2 个字段称为 filed您可以使用适当的类型转换访问两者。能够覆盖字段没有多大意义......只是行为。

关于java - 为什么在Java中继承类中访问字段和方法的差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1947730/

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