Up-casting 和 Down-casting

Up-casting 子类转父类

ParentClass parent=new ChildClass();

Down-casting 父类转子类

ParentClass[] parents={new Child1Class(),Child2Class(),Child3Class()}

Child1Class child1 = (Child1Class)parents[0];

### 向上转型的概念 在Java中,向上转型指的是将子类对象赋给父类引用的过程。这种转换自动发生,无需显式强制类型转换。通过这种方式可以利用多态特性,在运行时决定调用哪个方法版本。 当创建一个继承自某个基类或实现特定接口的实例并将其分配给该基类型的变量时即发生了向上的转换操作。这允许程序编写更加通用化的代码,因为处理的是超类而非具体派生类别本身[^1]。 ### 上下文中的例子展示 考虑下面定义了一个玩具工厂场景下的几个接口以及它们的具体实现: ```java package job; public interface HasBatteries {} interface Waterproof {} interface Shoots {} class Toy { void play() {} } // A specific toy implementing multiple interfaces. final class FancyToy extends Toy implements HasBatteries, Waterproof, Shoots { } ``` 现在假设有一个`FancyToy`的对象被声明为它的最顶层公共祖先——`Object` 类型: ```java Object obj = new FancyToy(); ``` 此时虽然 `obj` 是指向 `FancyToy` 实例的一个引用但它只知道自己是一个 Object 对象因此无法访问任何来自 Toy 或者其他三个接口的方法除非先向下转回原来的类型. 然而如果我们将它赋予更具体的父级类型如 Toy 则可以在不丢失功能的情况下享受更多灵活性: ```java Toy myToy = (Toy)new FancyToy(); // Upcast implicitly happens here as well since 'new' returns subclass reference directly. myToy.play(); // Now this call makes sense because we know our object supports playing behavior defined by Toy superclass. ``` 这里展示了如何安全地执行从子到父级别的提升而不会引起编译错误;同时也说明了为何有时需要进行反方向的操作来恢复原始特性的使用权限[^5].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值