我们在初学 Java 基础时,this 一般都是这样解释的:哪个对象调用,this 就代表哪个对象,
这时我就有疑问了,那如果我父对象调用,this 难道还能指向父对象不成,
先说结论:
this.属性只会指向当前类的属性this.方法才是谁调用就指向谁
实测:
public class extend_Test1 {
public static void main(String[] args) {
Son son = new Son();
son.method();
}
}
class Father {
private String name = "Father的属性";
public void method() {
System.out.println(this.getClass());
System.out.println(this.name);
}
}
class Son extends Father {
public String name = "Son的属性";
}
打印结果如下:
很奇怪吧,this 的运行时类型明明是 Son,打印属性的结果却是 Father 的属性,于是我决定在父类和子类中都定义一个方法,并通过反射获取 this 的属性值
public class extend_Test1 {
public static void main(String[] args) {
Son son = new Son();
son.method();
}
}
class Father {
private String name = "Father的属性";
public void abc() {
System.out.println("FatherFather");
}
public void method() {
System.out.println(this.getClass());
System.out.println(this.name);
this.abc();
for (Field field : this.getClass().getDeclaredFields()) {
try {
Object value = field.get(this);
System.err.println("属性值:" + value);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
}
class Son extends Father {
public String name = "Son的属性";
public void abc() {
System.out.println("SonSon");
}
}
打印结果如下:
为此我想起来了一个知识点,不知道和这个问题有没有关系,那就是属性是在编译时就确定下来的,没有多态的概念,但是感觉这跟 this 的关系也不大,可能只能等后面学到 jvm 的时候才能有个完美的解答了