所以我正在测试一些代码片段,以便理解继承的概念,这时我遇到了这个-对我来说-奇怪的现象。
所以首先我测试了这个简单的代码:
public class Main{
public static void main(String[] args) {
Bar bar = new Bar();
System.out.println("age = " + bar.age);
bar.test();
}
}
class Foo{
int age = 2;
void test(){
System.out.println("TEST FOO");
}
}
class Bar extends Foo{
int age = 4;
void test(){
System.out.println("TEST BAR");
}
}
输出结果和我预期的一样:
age = 4
TEST BAR
然后我对第3行做了一个小改动,将类型Bar
改为Foo
,如下所示:
Foo bar = new Bar();
现在,当我运行代码时,它给出了一个我认为很奇怪的输出:
age = 2
TEST BAR
为什么代码bar.age
现在正在使用Foo
类的age
成员(这是有意义的),而bar.test();
仍然使用Bar
类的方法(而不是来自Foo,因为这是该类型)?
发布于 2017-12-05 19:50:31
因为您已经定义了两个不同的age字段,每个类一个。字段不会被覆盖。
https://stackoverflow.com/questions/47652893
复制相似问题