Java引用变量有两个类型,一个是编译时类型,还有一个是运行时类型。
编译时类型是由声明该变量时使用的类型所决定,运行时类型是由该变量指向的对象类型决定当使
用该对象引用进行调用的时候,有这么一条规则,对象调用编译时类型的属性和运行时类型的方法
我们使用以下代码验证这句话
class Person {
public String name;
public Person() {
name = "person";
}
public void show() {
System.out.println("person show");
}
}
class Woman extends Person {
public String name;
public Woman() {
name = "woman";
}
public void show() {
System.out.println("woman show");
}
}
public class TestDemo {
public static void main(String[] args) {
Person person = new Person();
System.out.println(person.name);
person.show();
System.out.println();
Person person1 = new Woman();
System.out.println(person1.name);
person1.show();
System.out.println();
Woman woman = new Woman();
System.out.println(woman.name);
woman.show();
}
}
结果
person
person show
person
woman show
woman
woman show