非抽象外类中的抽象内部类

时间:2015-03-15 03:35:16

标签: java abstract-class abstract

我有一个带有抽象内部类Inner的超类A,另一个类B扩展了A.为什么没有强制B来实现抽象内部类?

我已经查看了here,但它只指定了非摘要类中的抽象方法。这里适用同样的原则吗?

public class A {
    ...

    abstract class Inner {
        ...
    }
}

public class B extends A { 
    ...

    // Isn't forcing me to implement Inner
}

4 个答案:

答案 0 :(得分:1)

内部类,无论是否为抽象类,对于具有内置引用另一个类的实例(其封闭类)的类来说,基本上是语法糖。它嵌套的事实简单地增加了潜在的可访问性限制。除此之外,它就像任何其他类一样(减去对static成员的一些其他限制)。

答案 1 :(得分:1)

在许多情况下,无需实施A.Inner。我最近使用的是一个用于Java的无UI浏览器库。他们有一个类Element,其子类有AnchorInputSpanScriptStyle。当然,你不会想要被迫实施,例如Element的所有子类?当超类是其他人的代码的成员时尤其如此。所述超类可以具有引用私有子类的私有方法。

答案 2 :(得分:0)

因为除非B中的某些代码试图实例化A.Inner,否则它将是一个无意义的限制,在这种情况下,现有规则已经捕获它。

答案 3 :(得分:0)

如果定义一个扩展抽象类的新具体类,则必须实现这些方法。但是你还没有定义一个扩展Inner的新具体类。您已定义了一个扩展B的新类A;从某种意义上说,B继承了Inner类,但它仍然是抽象的。 (在某些情况下你可以说B.Inner,但从我的测试来看,编译器似乎将它视为与A.Inner相同。)