2018/12/11 多态

多态

Java引用类型变量有两种类型:一种是编译时的类型,一种是运行时的类型。

编译的类型是由声明变量的时候决定的。

运行时类型由实际赋给该变量的对象决定。

如果运行时的类型和编译时的类型不一致就会出现所谓的多态。

首先编译时类型和运行时类型是一种父类和子类的关系。

多态最常用的场景就是子类重写父类的方法后,如果引用变量的类型为父类,而对象为子类,如果引用类型调用重写方法,会去执行子类定义的实现。

引用类型的强制类型转换
编写Java程序时,引用变量只能调用他编译时的方法,而不能调用其运行时类型的方法。如果你必须要调用其运行时的类型,则需要进行强制类型转换。

强制类型转换是把大的类型转换为小的类型。

在我们的引用数据里,大的类型是父类,小的类型是子类。

只可能发生在子类和父类的关系中

instanceof运算符
instance运算符的前一个操作数一般是引用数据类型变量,后一个操作数是类名(接口),它是用于判断前面的对象是否是后面的类、或者其子类。如果是的话,返回true。

instanceof运算符一般用于在我们对引用数据类型进行强制类型转换之前判断使用。
避免在实际的运行过程中出现 ClassCastException

public class Client1 {
	public static void main(String[] args) {
		Animal tom = new Dog();
		Animal mimi = new Cat();

		Animal ani1 = new Animal();

		if (ani1 instanceof Dog) { // 此处ani1的数据类型为 Animal 所以运算的结果为 false
			Dog dog1 = (Dog) ani1;
			System.out.println(dog1.getAge());
		}

		if (tom instanceof Dog) { // 此处tom运行时数据类型为 Dog 所以运算的结果为 true,可以进行转换
			Dog dog2 = (Dog) tom; // 强制类型转换
			dog2.setAge(20);
			System.out.println(dog2.getAge());
		}

		tom.cry();
		mimi.cry();

	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值