In the following scenario:
class Person{
public int ID;
}
class Student extends Person{
public int ID;
}
Student "hides ID field of person.
if we wanted to represent the following in the memory:
Student john = new Student();
would john object have two SEPARATE memory locations for storint Person.ID and its own?
正确。 在你的榜样每个类都有自己的int ID
id字段。
您可以阅读或在子类这样分配值:
super.ID = ... ; // when it is the direct sub class
((Person) this).ID = ... ; // when the class hierarchy is not one level only
或外部(当它们是公共的):
Student s = new Student();
s.ID = ... ; // to access the ID of Student
((Person) s).ID = ... ; to access the ID of Person
是的,你可以验证:
class Student extends Person{
public int ID;
void foo() {
super.ID = 1;
ID = 2;
System.out.println(super.ID);
System.out.println(ID);
}
}
对,那是正确的。 将有两个不同的整数。
您可以访问Person
的int类型Student
有:
super.ID;
不过要小心,动态调度不发生对成员字段。 如果你定义一个使用上的人的方法ID
字段,它是指Person
的领域,而不是Student
“,即使被称为S上一个Student
对象。
public class A
{
public int ID = 42;
public void inheritedMethod()
{
System.out.println(ID);
}
}
public class B extends A
{
public int ID;
public static void main(String[] args)
{
B b = new B();
b.ID = 1;
b.inheritedMethod();
}
}
上述将打印42,而不是1。