JavaSE基础(49) 引用类型转换

大小的标准:引用类型-->有继承关系,父类为大,子类为小。
                      基本数据小型-->精度大的为大,精度小的为小。

1、子类转换父类类型;(小转大)--》自动转换

Animal a = new Person();--》直接把子类对象赋值给父类变量

2、把父类类型转换子类类型 (大转小)--》强制类型转换

Animal a = new Person();

Person p = (Person)a;

引用类型的强转条件 : 把父类类型(直接父类+间接父类)   ---> 子类类型

 A x = (A)B;   只要B是A的父类,此句代码编译通过

强转的意义:把父类类型强转为子类类型,在编译期可以调用子类的字段与方法
                     (父类的字段与方法子类都能直接继承,但是子类有的父类有可能没有)
                    ==>强转之后,父类与子类的字段与方法都可以使用

小结:在编译期,类型只要大小的关系可以不一致,在运行期,类型必须一致!

以后再把父类转成子类的时候,应该先判断!

instanceof(只能够用于引用类型)

A instanceof B  

判断A是否是B的实例

A是一个变量或者对象,  B 是一个类型(类 接口...)

A的运行时类型如果是B 或者是B的子类  结果都是true

ex:

class Test{
public static void main(String[] args){
		Teacher t = new Teacher();
		//Student s = (Student)t;//不能转,因为Student 与 Teacher没有继承关系
		Person p = t;//引用类型 小转大,自动转换
		Person ps = new Person();
		//Student s = (Student)ps;//引用类型的 大转小,强制转换.     

		int i = 5;
		//boolean b = i;//不能转,因为boolean与int 没有比较大小的标准
		double d = 5.5;
		i = (int)d;//基本数据类型 大转小,强制转换
		byte b = 127;
		i = b;//基本数据类型  小转大,自动转换

		System.out.println("----------------------------------------------------");

		Person p2 = new Student();
		if(p2 instanceof Teacher){//判断p2是否是Teacher类型的对象
			Teacher t2 = (Teacher)p2;//此行会运行错误。原因:在运行期,p2是Student类型,不能转换为Teacher类型
			System.out.println(t2.name);
		}else if(p2 instanceof Student){//判断p2是否是Student类型的对象
			Student s2 = (Student)p2;
		}
		/*
			在实际项目中,p2的值可能是 new Student()/new Teacher()/new Person(). 如果值是new Teacher()则把该对象p2
			强转为Teacher类型
			问题:如何判断p2的值到底是new的哪个类对象?
			方案:使用instanceof.       instanceof:判断指定变量是否是指定类型的对象。
			当前场景:判断 p2 是否是 Teacher类型 的对象。
			语法:指定变量 instanceof 指定类型。   返回false:不是指定类型的对象 , 反之则反
			
			在运行期有效。
		*/
	}
}
class Person{}
class Student extends Person{
	String name;
}
class Teacher extends Person{
	String name;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郑清

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值