确定输出:
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;
}
Run Code Online (Sandbox Code Playgroud)
我知道答案是1,我猜这是因为因为打印函数没有被覆盖ChildClass,所以它具有与它相同的定义ParentClass.为什么ID不是子类中给出的ID,因为Java使用后期绑定?
对象字段上没有动态分派,仅在方法上.
该方法的唯一版本print在类中,并且仅在的字段Parent上可见。Parentid
为了打印 的Childid,您必须使用完全相同的习惯用法,当在 , 的实例上调用时,该方法将打印 的@Overrideid (如果存在),或者的字段(如果可见并且没有声明)。printChildChildParentididChild
例子
如果您将此代码添加到您的ChildClass:
void print() {
System.out.println(id);
}
Run Code Online (Sandbox Code Playgroud)
要么按照现在的方式ChildClass进行声明,并且对实例的任何调用都将打印。int id = 2printChildClass2
或者,ChildClass不声明id并将print打印1提供的ParentClass并且ChildClass位于同一包中(您的id字段是默认访问的ParentClass)。