在以下情形中:
class Person{
public int ID;
}
class Student extends Person{
public int ID;
}
学生“隐藏了人的身份证。
如果我们想在内存中表示以下内容:
Student john = new Student();
john对象是否有storint Person.ID和它自己的两个SEPARATE内存位置?
答案 0 :(得分:5)
是的,您可以通过以下方式验证:
class Student extends Person{
public int ID;
void foo() {
super.ID = 1;
ID = 2;
System.out.println(super.ID);
System.out.println(ID);
}
}
答案 1 :(得分:5)
正确。示例中的每个类都有自己的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
答案 2 :(得分:1)
是的,这是正确的。将有两个不同的整数。
您可以使用以下网址访问Person
中的Student
int
super.ID;
但要小心,成员字段不会发生动态调度。如果您在Person上使用ID
字段定义方法,即使在Person
对象上调用,它也会引用Student
的字段,而不是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。