一.什么是向上转型?
1.概念
在 Java 中,向上转型(Upcasting)是指将一个子类对象的引用赋值给一个父类类型的变量。
语法格式:父类类型 对象名 = new 子类类型()
Animal animal = new Cat ();
2.用法
例如:有一个animal的父类和cat和dog的子类。
狗和猫都属于动物。
如图,cat和dog都是animal的子类。
向上转型,animal对象只能调用自己也就是父类自己的方法,无法调用子类特有的方法。
当它调用子类重写的方法时候,优先调用的是子类的方法,如下图所示:
优点:
1.代码复用和灵活性:通过向上转型,可以将子类对象视为父类对象来处理,使得可以在同一代码段中使用父类类型的变量来引用不同子类的对象,提高了代码的复用性和灵活性。
2.实现多态性:是实现多态的基础,使得在运行时能够根据对象的实际类型动态地决定调用哪个方法,增强了程序的扩展性和可维护性。
缺点
1.功能受限:向上转型后,只能访问父类中定义的成员和方法,无法直接访问子类特有的成员和方法,在某些情况下可能会限制功能的完全发挥。
2.类型不确定性:由于是通过父类引用引用子类对象,在某些情况下,如果需要明确对象的具体子类类型,需要额外的类型判断和向下转型操作,增加了代码的复杂性和出错的可能性。
复制重新生成
二.什么是向下转型
1.概念
在 Java 中,向下转型(Downcasting)是与向上转型相对的概念,向上转型是将子类对象的引用赋值给父类类型的变量,而向下转型则是将父类类型的引用强制转换为子类类型的引用。
通俗来讲就是将一个子类对象向上转型之后可以当成父类对象使用,若需要调用子类特有的方法,则需要将父类对象再还原为子类对象。这就称作向下转型。
2.用法:
直接向下转型
刚才无法调用子类的这个teyou()方法,现在就可以使用了,这种是直接向下转型。
间接向下转型
还有就是间接向下转型。
通过一个cat对象来接收这个向下转型的对象,此时也可以直接调用子类的teyou()方法
作用:
主要是为了解决向上转型无法调用子类的非重写的方法。
优点
1.访问子类特有功能:当通过向上转型获得的父类引用,需要调用子类特有的方法或访问子类特有的属性时,通过向下转型可以实现这一需求,从而充分利用子类特有的功能和特性。
2.实现特定功能:在一些需要根据子类的具体类型执行特定逻辑的场景中,向下转型可以使程序能够准确地识别对象的具体子类类型,以便执行对应的操作。
缺点
1.类型安全风险:如果进行向下转型时,父类引用实际指向的对象并非预期的子类类型,会引发 ClassCastException
运行时异常,这可能导致程序崩溃或出现错误结果。
2.代码可读性和可维护性:过度使用向下转型可能会使代码的可读性降低,并且使代码的维护变得更加困难,因为需要时刻关注类型转换的正确性和安全性。
三.instanceof 的使用
Java中为了提高向下转型的安全性,引入了instanceof。如果表达式为 true,则可以安全转换。
用法
第三张图,通过if语句来判断是否animal符合向下转型的条件(animal是否发生了向上转型),该手段增强了代码的安全性。
四.结束语
感谢大家的查看,希望可以帮助到大家,做的不是太好还请见谅,其中有什么不懂的可以留言询问,我都会一一回答。
感谢大家的一键三连。