确定输出:
public class Test1{
public static void main(String args[]){
ChildClass c = new ChildClass();
c.print();
}
}
class ParentClass{
int id = 1;
void print(){
System.out.println(id);
}
}
class ChildClass extends ParentClass{
int id = 2;
}
我知道答案是1,我猜这是因为因为ChildClass
中没有覆盖打印功能,所以它与ParentClass
中的定义相同。为什么ID不是子类中给出的ID,因为Java使用后期绑定?
答案 0 :(得分:6)
对象字段没有动态调度,只有方法。
答案 1 :(得分:2)
print
方法的唯一版本位于Parent
类,并且只有Parent
id
字段的可见性。
要打印Child
的ID,您必须@Override
print
方法使用完全相同的惯用法,这将打印Child
1}}如果存在,则在Child
或Parent
id
字段的实例上调用时,如果可见,则为id
已在Child
中声明。
示例强>
如果您将此代码添加到ChildClass
:
void print() {
System.out.println(id);
}
ChildClass
现在声明int id = 2
,print
实例上ChildClass
的任何调用都会打印2
。
或者,ChildClass
未声明id
而print
将打印1
提供的ParentClass
和ChildClass
位于同一个套餐中(您的id
ParentClass
中的EAGER
字段是默认访问权限。
答案 2 :(得分:2)
因为第二个id
字段声明隐藏第一个,而不是覆盖它。
班级ChildClass
有两个名为id
的字段,每个字段都可以super.id
和this.id
访问。
答案 3 :(得分:1)
在父级中使id受保护,然后更改子构造函数中的值。