【发布时间】:2021-09-14 18:25:00
【问题描述】:
所以我想了解继承在 java 中的工作原理。我想借助第二类中的方法来更新超类中 a 的值。我想使用第三类中的方法打印更新的数据。但是我没有得到更新的数据,尽管我使用第二类中的更新方法将其更改为 20,但我仍然得到 10 作为输出。为什么会这样?我该如何解决?
代码:
class one{
int a=10;
}
class two extends one{
void update(){
super.a=20;
}
}
class three extends one{
void print_changed_data(){
System.out.println(super.a);
}
}
public class four{
public static void main(String[] args) {
two obj2=new two();
obj2.update();
three obj3=new three();
obj3.print_changed_data();
}
}
【问题讨论】:
-
它确实改变了,但是你为你的 obj2 实例改变了它,而不是为 obj3。你了解静态和实例的区别吗?
-
继承不是这样工作的,
three类是一个新实例,它对two类在其实例中对a做了什么一无所知。two类和three类具有不同的a实例。 -
也许您想通过使用 protected 关键字使第一类中的变量 a 可由其子类访问?
-
@Stultuske 你能给我确切的代码吗?
-
@LuckBandit74 我想说最好的做法是将其设为私有并创建一个 setter 和 getter 方法来访问类外的属性。
标签: java variables inheritance