7

在我正在阅读的文本中,作者展示了一个使用静态嵌套类的代码示例,然后评论说,如果静态嵌套类“让您感到困扰”,您可以将其编写为单独的类。

为什么会打扰你?在 Java 中使用静态嵌套类有什么缺点?

4

4 回答 4

5

优点: 作者的意思是静态嵌套类被编译成一个完全独立的 .class ,而不是包含它的外部类。因此,如果它困扰您或使事情复杂化或使您感到困惑,那么最好单独使用它。静态嵌套类不依赖于外部类实例,它可以自己运行。甚至一个 main 函数也可以写在静态嵌套类中并直接调用。它的好处是您可以在运行时创建更少的对象,而其他类型的嵌套类则不然。

缺点 我能想到的唯一缺点是静态嵌套类可以访问外部类的受保护成员和私有成员。假设您有一个类 X 和一个类 Y。为了让 Y 访问 X 的私有成员而不是世界其他地方,使 Y 成为 X 的内部类会有所帮助。通过将它们组合在一起来满足封装的要求。

但是静态嵌套类在访问它的成员时并不关心 Outer 类的可访问性修饰符。由于它可以独立生活,它可以允许来自外部世界的人与 Outer 类的私有成员混合,从而打破封装。

将静态嵌套类视为另一个顶级类,它可以在不使用外部类的上下文/实例的情况下访问外部类的私有和受保护成员,并将它们自由出售给外部世界以供不当使用。

为了更好地理解嵌套类或 Java 中的任何内容,我建议在阅读任何书籍之前先阅读 Oracle 文档,http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

于 2012-11-06T20:02:05.313 回答
2

嵌套类可能会打扰初学者,因为他不理解它。作者小心翼翼地不让这样的初学者迷惑,为了安慰他,他提供了一个简单的顶级课程。另一方面,嵌套类在示例中可能更合适,因为它的内容很可能是极简的,并且它有助于将所有相关的东西放在一个地方的可读性。

于 2012-11-06T19:55:50.330 回答
1

静态嵌套类不能直接引用在其封闭类中定义的实例变量或方法——它只能通过对象引用来使用它们。

静态嵌套类与其外部类(和其他类)的实例成员交互,就像任何其他顶级类一样。静态嵌套类在行为上是嵌套在另一个顶级类中的顶级类。

于 2012-11-06T19:54:37.693 回答
0

也许这可以帮助你----> http://www.techrepublic.com/article/explore-javas-static-nested-classes-and-inner-classes/5815620

于 2012-11-06T20:15:55.947 回答