我有一个带有抽象内部类Inner的超类A,另一个类B扩展了A.为什么没有强制B来实现抽象内部类?
我已经查看了here,但它只指定了非摘要类中的抽象方法。这里适用同样的原则吗?
public class A {
...
abstract class Inner {
...
}
}
public class B extends A {
...
// Isn't forcing me to implement Inner
}
答案 0 :(得分:1)
内部类,无论是否为抽象类,对于具有内置引用另一个类的实例(其封闭类)的类来说,基本上是语法糖。它嵌套的事实简单地增加了潜在的可访问性限制。除此之外,它就像任何其他类一样(减去对static
成员的一些其他限制)。
答案 1 :(得分:1)
在许多情况下,无需实施A.Inner
。我最近使用的是一个用于Java的无UI浏览器库。他们有一个类Element
,其子类有Anchor
,Input
,Span
,Script
,Style
。当然,你不会想要被迫实施,例如Element
的所有子类?当超类是其他人的代码的成员时尤其如此。所述超类可以具有引用私有子类的私有方法。
答案 2 :(得分:0)
因为除非B中的某些代码试图实例化A.Inner,否则它将是一个无意义的限制,在这种情况下,现有规则已经捕获它。
答案 3 :(得分:0)
如果定义一个扩展抽象类的新具体类,则必须实现这些方法。但是你还没有定义一个扩展Inner
的新具体类。您已定义了一个扩展B
的新类A
;从某种意义上说,B
继承了Inner
类,但它仍然是抽象的。 (在某些情况下你可以说B.Inner
,但从我的测试来看,编译器似乎将它视为与A.Inner
相同。)