问题:以下代码的结果是“5 A”和“10 B”。为什么对于 b.print() 来说,this.num 是对 A 类对象的引用,而 this.getClass() 是对 B 类对象的引用?
父类(super class)A
public class A {
private int num;
public A(int num) {
this.num = num;
}
public void print() {
System.out.println(this.num + " " + this.getClass().getName());
}
}
B子类
public class B extends A {
public B(int num) {
super(num);
}
}
主要方法
A a = new A(5);
B b = new B(10);
a.print();
b.print();
最佳答案
这是两个不同的事情。
this.getClass()
或更简单的 getClass()
(因为 this
暗示未指定)将始终引用实际的运行时类,该类可能是使用它的类或其子类。如果您从 A 调用它,它将返回 A 类,但如果您从它的子类调用它,它将返回该子类。
而 this.num
引用在 A
类中声明的特定实例字段。
当您在代码中引用此字段时,它必然依赖于声明此特定字段的类。
关于Java继承-访问私有(private)变量/getClass(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44804552/