通俗理解引用类型

在这里插入图片描述

Java中的编译类型和运行类型是指编译时期和运行时期的类型信息。 编译类型:在编译时期,Java编译器需要确定每个变量或表达式的类型,这个类型称为编译类型。编译类型是静态的,它是在编译时期就已经确定的。 运行类型:在程序运行时期,Java虚拟机需要确定对象的实际类型,这个类型称为运行类型。运行类型是动态的,在运行时期才能确定。 举个例子来说: 假设有一个父类Animal和它的两个子类Cat和Dog: ``` public class Animal { public void makeSound() { System.out.println("Animal makes a sound"); } } public class Cat extends Animal { public void makeSound() { System.out.println("Meow"); } } public class Dog extends Animal { public void makeSound() { System.out.println("Woof"); } } ``` 接下来,我们创建一个Animal类型的变量,但是实际上存储的是一个Cat对象: ``` Animal animal = new Cat(); ``` 这里就涉及到了向上转型和向下转型: 向上转型:将子类对象赋值给父类引用变量,这个过程称为向上转型。例如上面的代码中,new Cat()创建了一个Cat对象,但是它被赋值给了Animal类型的变量,这就是向上转型。向上转型是安全的,因为子类对象可以赋值给父类引用变量,但是反过来不行。 向下转型:将父类引用变量转换为子类对象,这个过程称为向下转型。例如,我们可以使用下面的代码将animal变量向下转型为Cat类型: ``` Cat cat = (Cat) animal; ``` 这里需要注意的是,向下转型是有风险的。因为在运行时期,animal变量的实际类型是Cat,所以可以成功转换。但是如果animal变量实际上存储的是一个Dog对象,那么向下转型就会抛出ClassCastException异常。因此,在进行向下转型时,我们需要确保变量的实际类型与转换类型一致。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值