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除此之外的任何其他内容。
添加回答
举报
