本地和非静态内部类之间有什么区别?

时间:2013-12-04 10:43:51

标签: java local inner-classes

我只想根据如何从封闭类或彼此的内部类访问成员来区分差异。

关于静态,最终,有效的最终成员以及为什么?

3 个答案:

答案 0 :(得分:2)

静态嵌套类实际上与使用单独的类文件相同,除非您将其放在另一个类文件中。

如果它不是静态的,则称为内部类内部类可以访问其封闭类的所有成员。如果是静态嵌套类,它们可以在不实例化的情况下存在,但内部类只能存在于其封闭类的实例中。

您应该注意概念的命名。简而言之:

  • 静态嵌套类:与普通类几乎相同但包含在另一个类中。可以访问public membrs
  • 内部类:只能与其封闭类的实例一起存在。可以访问所有成员。
  • 本地类:在块中声明的类。它就像一个内部类(可以访问所有成员),但它也可以访问本地范围。

official documentation详细解释了这一点,所以我建议你仔细阅读。有关本地和匿名内部类的信息也可以在那里找到。

答案 1 :(得分:1)

封闭类的

private成员在嵌套类中是可见的,同样,嵌套类的private成员对外部类是可见的。

如果嵌套类为static,则只能看到外部类的static个成员,包括private static

除非嵌套类为static,否则您需要外部类的实例才能实例化嵌套类。这是有道理的 - 对于非静态嵌套类,您只能从外部类的实例访问嵌套类的类定义,就像它是成员变量一样。

除嵌套类外,还有匿名内部类。这些不是静态的,但显然它们的范围仅限于定义它们的方法。

答案 2 :(得分:-1)

  

我只想根据如何从封闭类或彼此的内部类访问成员来区分差异。

没有区别。每个人都可以看到所有其他成员。

你没有问,但是如果封闭的类是static.则存在差异。静态嵌套类只能访问封闭类的静态成员。 [它可以在访问控制方面“看到”非静态成员,但它没有外部对象的内在句柄,因此无法访问它们。]

  

关于静态,最终,有效的最终成员以及为什么?

这甚至不是一句话,更不用说一个问题了。