一、对象类型转换
Java的基本类型转换暂且不提,这里主要记录一下对象之间的类型转换
在这之前,先明确两个概念:对象类型和引用类型
public static void main(String[] args) {
Person p = new Person();
}
对象(的)类型:如上图对象就是 new Person(); 该对象的类型为Peoson
引用类型:如图;p 引用指向 new Person的地址,所以它也是Peoson
通常情况下,引用类型和对象类型是一样的
所有的对象类型转换必须具有继承关系,否则无法转换
1.子类转父类
public static void main(String[] args) {
son s = new son();
Person p = s;
}
可以直接将子类s赋给父类p,系统自动完成类型转换
转换后的父类p,拥有(本身和子类)的所有方法和属性,相当于合并,但是,子类会覆盖掉父类中同名的属性和方法,
比如在p中有一个属性 String name = “father”,子类中也有一个 String name = “son”,转换后,调用 p.name 输出 son
2.父类转换子类
通俗讲:看运气,能不能成功不确定
主要看子类的引用类型和父类是否一致
public static void main(String[] args) {
Person p = new Person();
son s2 = new son();
son s;
//转换失败,因为p指向的类型是Person ,s 的引用类型为son
s = (son)p;
//成功 首先将 p 的引用指向s2,此时的 p 的类型变成了son, 所以同类型之间可以转换
p = s2;
s = (son)p;
}
3.接口之间转换
和父子类转换一致,
1.实现类 b --> 接口 a
直接转 b = a;
2.接口 a -- > 实现类 b
看接口的引用
a = b1 接口引用指向 b1
B b2 = (B)a; 再转,此时可以成功
4.总结:
类型的转换必须是同类型之间,所以不同对象之间的转换本质是把两个对象想办法变成同一种类型
像子类转父类,子接口转父接口,由于子类继承于父类,所以父类包含子类,在转换过程中,系统将自动帮我们转换
父转子,系统不能识别,于是需要手动强制转换,并且只有在手动将两者的类型调为一致才可以成功,通常我们不会去调整两者的类型,所以表现出来的效果就是,有时候可以成功,有时候会失败