在我正在编写的文本中,作者使用静态嵌套类显示了一个代码示例,然后注释如果静态嵌套类“困扰你”,则可以将其作为单独的类编写。
为什么会打扰你?在Java中使用静态嵌套类有什么缺点?
答案 0 :(得分:5)
<强>优势:强> 作者的意思是静态嵌套类被编译成一个完全独立的.class,而不是封闭它的外部类。因此,如果它困扰你或者使事情复杂化或使你困惑,那么最好分开使用它。 静态嵌套类不依赖于外部类实例,它可以自己运行。甚至主函数也可以写在静态嵌套类中并直接调用。它的好处是你可以在运行时创建更少数量的对象,而其他类型的嵌套类则不然。
<强>缺点强> 我能想到的唯一缺点是静态嵌套类可以访问外部类的受保护成员和私有成员。 假设您有一个X类和一个Y类。为了让Y访问X的私有成员而不是世界其他地方,让Y成为X的内部类有帮助。通过将它们组合在一起来满足封装的目的。
但是静态嵌套类在访问其成员时并不关心外部类的可访问性修饰符。由于它可以独立生存,它可以允许外部世界的某些人与外部类的私有成员混合,从而打破封装。
将Static嵌套类视为另一个顶级类,可以在不使用Outer类的上下文/实例的情况下访问Outer类的私有成员和受保护成员,并自由地将它们出售给外部世界以供不良使用。
为了更好地理解嵌套类或Java中的任何内容,我建议您在阅读任何书籍之前阅读Oracle文档,http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
答案 1 :(得分:2)
嵌套类可能会打扰初学者,因为他不理解它。作者小心翼翼,不要混淆这样的初学者,为了安慰他,他提供了一个简单的顶级课程。另一方面,嵌套类在示例中可能更合适,因为内容很可能是简约的,并且它有助于将所有相关内容集中在一个地方。
答案 2 :(得分:0)
静态嵌套类不能直接引用其封闭类中定义的实例变量或方法 - 它只能通过对象引用来使用它们。
静态嵌套类与其外部类(和其他类)的实例成员交互,就像任何其他顶级类一样。静态嵌套类在行为上是一个嵌套在另一个顶级类中的顶级类。
答案 3 :(得分:0)