内部类和外部类的区别

Posted

技术标签:

【中文标题】内部类和外部类的区别【英文标题】:Difference between inner and outer class 【发布时间】:2019-02-12 04:30:20 【问题描述】:

假设我们有这个:

class Foo 
public class Bar

对比:

public class Bar
  public class Foo

我不知道有什么区别。在这两种情况下,Foo 都应该对包含 Bar 的文件是私有的。有区别吗?当然,如果我们将其设为静态,那么它可能对其他文件可用?

public class Bar
  public static class Foo

但我是专门询问没有 static 关键字的情况。

【问题讨论】:

在这两种情况下,Foo 应该是包含 Bar 的文件的私有。在这两种情况下都是错误的。 你是什么意思 Foo 应该是包含 Bar 的文件的私有 ?更有可能是 ***.com/questions/11398122/… 的副本 好吧,请纠正我,也许它应该是包私有的,而不是文件私有的 【参考方案1】:

来自 Oracle 文档,

嵌套类是其封闭类的成员。非静态嵌套类(内部类)可以访问封闭类的其他成员,即使它们被声明为私有。静态嵌套类无权访问封闭类的其他成员。

有关嵌套类的更多详细信息,请参阅此官方文档。

https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

【讨论】:

这不是“官方文档”。它由 JLS、JVM 规范和 Javadoc 组成。这是一个教程。它是关于嵌套类,而不是具体的内部类。 内部类不是嵌套类吗?我相信,问题中提到的示例类是嵌套类,“教程”/“文档”回答了这个问题。 (嵌套类中私有、公共、静态引用的使用) @SivarajVelayutham OP 明确表示他们只询问内部类(“我专门询问没有 static 关键字的情况”),因此链接到讨论的文档嵌套类通常是不合适的。

以上是关于内部类和外部类的区别的主要内容,如果未能解决你的问题,请参考以下文章

java 内部类和外部类的关系

java 内部类和静态内部类的区别

静态类和内部类的区别是啥

在静态方法中new 一个内部类对象和new 一个外部类对象的区别

静态内部类和非静态内部类的区别

四种内部类和区别