考虑以下非法代码: -我不明白这种继承功能
class WrongCode{
int i;
static int i;
}
这里,编译器说,我们在同一个班级重复的字段。
现在,考虑在同一文件中的以下类。
class Parent{
int i = 10;
}
class Child extends Parent{
static int i = 100;
}
public class Main{
public static void main(String ... aaa){
Parent ob = new Child();
System.out.println(ob.i); // This prints Parent's i
}
}
由于实际对象是Child,因此不应该参考Child's i吗?如果它指的是家长的“我”,那么在某种程度上,它也会在其自己的班级中拥有家长的“我”以及不允许的自己的静态“我”。
孩子静态我overshadows父母我。父母的我不是静态的,那么它如何直接使用实例而不是className来访问?
尝试'Child ob = new Child();'得到派生的'i'。 – 2012-01-06 06:44:06
在Child类中,让我非静态的,看看会发生什么?它仍然应该打印父母我。 – 2012-01-06 06:47:13
@βнɛƨнǤʋяʋиɢ让我在Child中是非静态的,结果相同。 – whitehat 2012-01-06 06:49:30