编译类型 java_Java编译时类型和运行时类型

一、前言

最近在做笔试题的时候,才看到有这么一个知识点,查了好几篇博客,在这里记录一下

二、是什么

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();

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

结果:

person

person show

person

woman show

woman

woman show

1

2

3

4

5

6

7

8

从结果可以看出,第一条语句 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

---------------------

作者:EclipseO2

来源:CSDN

原文:https://blog.csdn.net/babycan5/article/details/82355550

版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值