JAVA转型问题
两种转型
- 向上转型(upcasting)
将子类对象转为父类对象,父类对象可以是接口- 注意:子类对象转换为父类类型后不能调用子类特有方法
- 向下转型(downcasting)
与向上转型相反,即是把父类对象转为子类对象
例子
例子1:
Father f1 = new Son(); // 向上转型
// f1引用指向一个Son对象,父类引用指向子类对象
Son s1 = (Son)f1; // 向下转型
// f1还是指向Son对象,转换后子类s1引用指向子类对象
例子2:
Father f2 = new Father();
Son s2 = (Son)f2; // 出错,子类引用不能指向父类对象
总结
- 父类引用可以指向子类对象,而子类引用不能指向父类对象
- 把子类对象直接赋给父类引用叫向上转型,不需要强制转换
Father f1 = new Son();
- 把指向子类对象的父类引用赋给子类引用叫向下转型,需要强制转换
- 无论是向上还是向下转型,最终都是子类对象做着类型的转换
- 子类对象转换为父类类型后不能调用子类特有方法
- 无继承关系的两个类的对象之间试图转换会出现编译错误
多态存在的三个必要条件
- 继承
- 重写
- 父类引用指向子类对象