Roa*_*oam 5 java inheritance casting
这实际上是一种验证:
将子对象转换为父类型有什么好处吗?
假设我有两个类 Parent和Child。Child正在扩展Parent。
代码有什么不同吗
Parent p = new Child();
Run Code Online (Sandbox Code Playgroud)
和
Parent p = (Parent) new Child();
Run Code Online (Sandbox Code Playgroud)
?
p在调用其任何方法或以任何方式访问其任何一个成员时,行为是否会有所不同?
从我的角度来看,两者是相同的,在这里铸造是多余的。
//====================================
编辑:作为开发人员,我一直希望能够控制从Child外部调用哪个方法 - Child或Parent的方法。
因此,编码器将寻求调用Parent的方法,无论该方法是否在子类中被重写。也就是说,子类的重写方法将被绕过,并且该方法的Parent实现将在Child对象上调用。
不,无论您调用该方法所使用的引用类型如何,该对象的行为都是相同的。
这是设计使然——它允许子类覆盖其超类的方法。
在您的示例中,赋值之前的向上转换没有效果 - 它将作为赋值的一部分隐式发生。
Parent p = (Parent) new Child();
Run Code Online (Sandbox Code Playgroud)
调用者不能强制对象忽略其方法覆盖。这是一件好事。否则,孩子永远无法强制执行自己的内部不变量。
如果你想让调用者选择是调用父方法还是子方法,那么你的API可以提供两种方法。父母和孩子都可以决定如何支持各自。
| 归档时间: |
|
| 查看次数: |
17106 次 |
| 最近记录: |