内部类-----Java
内部类是一类特殊的类,指的是定义在一个类的内部的类,在Java中内部类主要分为非静态内部类、静态内部类、局部
内部类、匿名内部类。
非静态内部类,作为类的成员存在,和成员变量、构造方法、代码块并列。因为是类的成员,所以非静态成员内部类可以
使用public、protected、默认、private修饰,而外部类只能使用public、默认修饰。
public class OutClass {//成员变量private String name;private int num = 10;//构造方法public OutClass(){}public OutClass(String name,int num){this.name = name;this.num = num;}//成员方法public void methodOut(){System.out.println("methodOut");}public void methodOut2(){InnerClass ic = new InnerClass();System.out.println(ic.num);//20ic.methodInner();}class InnerClass{private String type;private int num = 20;//构造方法public InnerClass(){}public InnerClass(String type,int num){this.type = type;this.num = num;}//成员方法public void methodInner(){System.out.println(name);int num = 30;System.out.println(num);//30System.out.println(this.num);//20//内部类如何访问外部类的同名成员变量System.out.println(OutClass.this.num);//10methodOut();}}
}
public class Test {public static void main(String[] args) {OutClass oc = new OutClass();oc.methodOut();oc.methodOut2();//要创建非静态成员变量内部类对象,必须先创建外部类的对象//OutClass.InnerClass ic = new OutClass().new InnerClass();OutClass oc2 = new OutClass();OutClass.InnerClass ic = oc2.new InnerClass();}
}
运行结果如下:
总结:
1、内部类可以直接访问外部类成员
2、外部类不能直接访问内部类的成员,需要先创建对象再通过对象名来访问。
3、内部类如何访问外部类的同名成员变量:OuterClass.this.num
4、必须先创建外部类的对象,才能创建内部类的对象。非静态成员内部类是属于某个外部类对象的。
5、非静态内部类不能有静态方法、静态属性和静态代码块。
5、外部类的静态方法、静态代码块不能访问非静态内部类,包括不能使用非静态内部类定义的变量、创建的实例。
注意:
内部类只是编译时的概念,一旦我们编译成功,就会成为完全不同的两个类。对于一个名为Out的外部类和其内部定义的名为Inner
的内部类。编译完成后会出现Outer.class和Outer$Inner.class两个类的字节码文件。所以内部类是相对独立的一种存在,其成员变量、方法
名可以和外部类相同。