本文什么是内部类?我们在另一个类B中定义了一个类A,那么这个类A就称为内部类。为什么需要内部类?原因有三:内部类方法可以访问类定义范围内的数据,包括私有数据。内部类可以对同一包中的其他类隐藏。当你想定义一个回调函数又不想写很多代码时,使用匿名内部类很方便。内部类有什么特点?内部类可以使用多个实例,每个实例都有自己的状态信息,并且独立于其他外围对象的信息。在一个封闭类中,多个内部类可以用不同的方式实现同??一个接口,或者从同一个类继承。内部类对象的创建时刻不依赖于外部类对象的创建。内部类没有混淆的“is-a”关系,它是一个独立的实体。内部类提供了更好的封装,除了外部类,其他类无法访问。来自《Think in java》内部类有哪几种?成员内部类:与成员变量同级局部内部类:方法中的内部类匿名内部类:基本属于接口的实现类,一次性的使用场景。静态内部类:静态修饰成员内部类如何使用内部类?创建静态内部类对象的一般形式是:外部类类名。内部类类名xxx=新的外部类类名。内部类classname()创建成员内部类对象的一般形式是:外部类名。内部类名xxx=外部类对象名。newinternalclassname()以上是一个简单的回答,如果面试可能还会继续问,那你就得往下看了。这是一个黄金分割点,以上部分是一道初级面试题。面试答案:常见高级面试题。为什么成员内部类可以无条件访问外部类的成员?解题思路:先写个案例证明是否正确,再深入理解成员内部类和外部类的关系。publicclassOuterClass{classInnerClass{}}代码中的InnerClass为成员的内部类。使用javac编译OuterClass,或者在IDEA或者eclipse中编译。编译之后,你会发现其实有两个.class文件。外部类:OuterClass.class成员内部类:OuterClass$InnerClass.class用javap命令查看这两个类文件:OuterClass.class内容如下:一个简单的类,没有什么不同。主要看内部类的.class文件内容有没有特殊之处。OuterClass$InnerClass.class的内容如下:从以上内容可以看出四点:1、定义了一个常量,指向外部类对象的地址。2、内部类默认有构造方法。如果有参数,参数就是外部类。3、将外部类对象的地址赋值给成员变量1(this$0)。4.成员变量有两个,一个是它自己,一个是指向外部类对象地址的变量。所以这就证明了为什么内部类可以访问外部类的成员(静态内部类不依赖外部类,也就是说可以创建内部类的对象而不创建外部类的对象).此外,还可以得出一个结论:成员的内部类依赖于外部类,外部类必须要先创建好对象,内部类才能创建对象。综上所述,在面试中你可能会遇到以下问题:什么是内部类?为什么需要内部类?内部类有什么特点?内部类有哪些类型?为什么内部类的成员可以无条件访问外部类的成员?在面试中遇到以上问题,你可以轻松应对。本文转载自微信公众号《Java后端技术全栈》,可通过以下二维码关注。转载本文请联系Java后端技术全栈公众号。
