本文共 1090 字,大约阅读时间需要 3 分钟。
定义父类 Animal,代码如下:
public class Animal { public void sleep() { System.out.println("小动物在睡觉"); } public static void doSleep(Animal animal) { // 向上转型,参数是父类引用,但实际传递子类对象 animal.sleep(); } public static void main(String[] args) { Animal animal = new Animal(); animal.doSleep(new Cat()); animal.doSleep(new Dog()); }} public class Cat extends Animal { @Override public void sleep() { System.out.println("猫正在睡觉"); }} public class Dog extends Animal { @Override public void sleep() { System.out.println("狗正在睡觉"); }} 如果不使用向上转型,则必须写两个 doSleep 方法,一个接收 Cat 类对象,一个接收 Dog 类对象。这会导致大量重复代码,特别是当有多个子类时,代码复杂度急剧增加。向上转型通过父类引用统一处理多个子类对象,充分体现了多态的优势,提升了程序的可扩展性和间接性。
向上转型:将子类对象直接赋值给父类引用,Java会自动向上转型。例如:
Animal father = new Cat();
向下转型:将父类引用转换为子类引用时,必须使用强制转换,并加上 instanceof 检查。例如:
Cat son = (Cat) father;
强制转换前,必须确保 father 指向的是 Cat 类对象。
向上转型的限制:向上转型只能访问父类的属性和方法,无法直接访问子类特有的成员。尽管如此,子类可以通过重写父类方法来提供特定功能。
向上转型的优势:通过父类引用统一处理多个子类,减少代码重复,体现了多态的优雅,提升了代码的可维护性和扩展性。
在实际编码中,向上转型和向下转型各有适用场景,正确使用可以充分发挥多态的优势。
转载地址:http://yglq.baihongyu.com/