3 回答
TA贡献1856条经验 获得超5个赞
一般来说,子类可以向它们从父类继承的接口添加方法。使方法更易于访问是有效地添加到接口中。
但是,为什么首先要允许在子类中有更多可访问的方法呢?
因为它对于包含子类引用的代码很有用。
是否有这种情况有帮助?
一个很好的例子是Object.clone(),一种受保护的方法。所有 Java 类都是Object. 支持克隆的子类可以选择公开这个方法。
Foo foo1 = new Foo();
Foo foo2 = foo1.clone(); // Sometimes you're holding a subclass reference.
TA贡献1817条经验 获得超6个赞
因为分类应该允许您将子类视为其超类的实例。我认为这称为is-a
关系(即B is-a A
,但不是相反)。我真的不知道简洁地解释这一点的好方法。
在您的示例中,所有实例B
也是 实例A
(请注意,这可能过于简单化,但我认为对于此示例就足够了)。A
仅保证在其自己的定义中具有公开的方法。B
只是碰巧创建了一个受保护的方法public
,但假设您有另一个C
未执行此操作的类调用。好吧,您可以同时将B
和C
转换为A
,但是如果您被允许调用受保护的方法 onA
因为B
将其公开,那么您在传递C
.
在另一个包中,您将强制转换B
为A
,因此您的对象有效地采用了 的接口,A
因此您只能使用由 提供给您的接口A
。在JVM可以顺利通过的麻烦和通知:1)A
其实B
和2)B
使foo
公众,所以foo
应该是可调用的?我的意思是我可以假设,但是在 JVM 中实现需要多少努力以及它有多容易出错?把事情简单化。如果类型为A
,则接口为A
。如果类型为B
,则接口为A
以及B
除此之外的任何其他内容。
添加回答
举报