大家好,又见面了,我是你们的朋友全栈君。
一、前言
最近在做笔试题的时候,才看到有这么一个知识点,查了好几篇博客,在这里记录一下
二、是什么
Java引用变量有两个类型,一个是编译时类型,还有一个是运行时类型。
编译时类型是由声明该变量时使用的类型所决定,运行时类型是由该变量指向的对象类型决定
如果两种类型不一致,就会出现多态,因此就会将子类对象之间赋值给父类引用变量,称为向上转型,而不用进行类型转换。如 Animal a = new Bird()
,其中引用变量 a 的编译时类型是 Animal,运行时类型是 Bird,两者不一致,因此出现多态
当使用该对象引用进行调用的时候,有这么一条规则,对象调用编译时类型的属性和运行时类型的方法
我们直接看一个例子来验证这句话
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
从结果可以看出,第一条语句 person 引用调用的属性属于 Person 类,person 引用调用的方法还是 Person 类;之后以此类推
三、参考
https://blog.csdn.net/snow_7/article/details/51579278
https://blog.csdn.net/qq_29513537/article/details/60765552
https://blog.csdn.net/qq_23419401/article/details/52064871#java
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/139845.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...