Java成员内部类

在类的内部但方法之外创建的非静态类称为成员内部类。它也被称为常规内部类。它可以使用public、default、private和protected等访问修饰符进行声明。

语法:

class Outer{  
 //代码 
 class Inner{  
  //代码  
 }  
}  

Java成员内部类示例

在此示例中,我们在成员内部类中创建了一个msg()方法,该方法访问了外部类的私有数据成员。

TestMemberOuter1.java

class TestMemberOuter1{  
 private int data=30;  
 class Inner{  
  void msg(){System.out.println("data is "+data);}  
 }  
 public static void main(String args[]){  
  TestMemberOuter1 obj=new TestMemberOuter1();  
  TestMemberOuter1.Inner in=obj.new Inner();  
  in.msg();  
 }  
}  

输出:

data is 30

如何在Java中实例化成员内部类?

成员内部类的对象或实例始终存在于其外部类的对象内部。使用new运算符以稍微不同的语法创建成员内部类的对象。

创建成员内部类对象的通用语法形式如下:

语法:

OuterClassReference.new MemberInnerClassConstructor();  

示例:

obj.new Inner();  

这里,OuterClassReference是外部类的引用,后面跟着一个点,然后是new运算符。

Java成员内部类的内部工作原理

在内部类的情况下,Java编译器会创建两个类文件。内部类的类文件名为"Outer$Inner"。如果要实例化内部类,必须创建外部类的实例。在这种情况下,内部类的实例将在外部类的实例内部创建。

编译器生成的内部代码

在这种情况下,Java编译器会创建一个名为Outer$Inner的类文件。成员内部类具有Outer类的引用,因此它可以访问Outer类的所有数据成员,包括私有成员。

import java.io.PrintStream;  
class Outer$Inner  
{  
    final Outer this$0;  
    Outer$Inner()  
    {   super();  
        this$0 = Outer.this;  
    }  
    void msg()  
    {  
        System.out.println((new StringBuilder()).append("data is ")  
                    .append(Outer.access$000(Outer.this)).toString());  
    }  
}  

标签: java, Java面试题, Java下载, java教程, java技术, Java学习, Java学习教程, Java语言, Java开发, Java入门教程, Java进阶教程, Java高级教程, Java笔试题, Java编程思想