- 对于向上转型,只要是其父类,或者父接口,可以使用向上转型来转为该类型。相当于父类引用指向子类对象。
方便后续扩展。加入父类又有了新的实现子类,原来的涉及父类类型的地方无需大量修改。
- 向下转型:只有当该变量本来是其子类,才可以向下转型为该类型。否则不能转型,运行时报错。
例如:如果Phone是父类,SmartWatch是子类(可能不符合逻辑,个人测试简单使用的实例)
public class Main {
public static void main(String[] args){
Phone aPhone = new Phone();
SmartWatch smartWatch = (SmartWatch) aPhone;
System.out.println(smartWatch.getTYPE());
}
}
Exception in thread "main" java.lang.ClassCastException: my.InterfaceTest.Phone cannot be cast to my.InterfaceTest.SmartWatch
at my.InterfaceTest.Main.main(Main.java:10)
只要是子类或者实现了该接口的类,即使是用父类来接受也可以转为另一个接口。
例如:
// 手机类
public class Phone implements Usbable, Phoneable{
// 实现方法省略
}
// usb接口
public interface Usbable {
Double power();
String linkType();
}
// 下述代码可以正常运行
Phoneable aPhone = new Phone();
System.out.println(((Usbable) aPhone).power());