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