1.内部类是定义在类中的类。A类需要直接访问B类中的成员时,可以将A类定义到B类中,作为B类的内部类存在。
2.内部类可以相当于外部类中的一个成员,可以被成员修饰符所修饰。(如:public private static)
3.静态内部类可以相当于一个外部类进行使用。
4.非静态的内部类只允许定义静态的常量,不能定义其他静态成员。
5.访问规则:
内部类可以直接访问外部类中的成员,因为内部类持有了外部类的引用。外部类名.this
外部类要访问内部类需要创建内部类的对象。
二、实例代码
//外部类Outer
class Outer
{
private static int num = 4;
//内部类Inner_1
class Inner_1
{
void show1()
{
System.out.println("内部类Inner_1 ,show1 "+num);//内部类Inner_1可以直接访问外部类Outer中的成员num
}
}
//外部类中的方法Method访问内部类Inner_1中的方法show1
public void Method()
{
Inner_1 in = new Inner_1();
in.show1();
}
//静态内部类Inner_2
static class Inner_2
{
void show2()
{
System.out.println("内部静态类Inner_2 ,show2 "+num);
}
static void show3()
{
System.out.println("内部静态类Inner_2 ,show3 "+num);
}
}
class Inner_4
{
static final int count = 5; //内部类中定义静态的常量
void show4()
{
System.out.println("内部类Inner_4 ,show4 "+count);
}
}
}
class InnerClassDemo
{
public static void main(String[] args)
{
//创建外部类对象,访问内部类。
Outer out = new Outer();
out.Method();
//创建非静态的内部类对象,可以通过创建外部类对象,被外部其他程序访问。
Outer.Inner_1 i1 = new Outer().new Inner_1();
i1.show1();
//创建静态内部类对象,并访问非静态成员。
Outer.Inner_2 i2 = new Outer.Inner_2();
i2.show2();
//创建静态内部类对象,并访问静态成员。
Outer.Inner_2.show3();
Outer.Inner_2 i4 = new Outer.Inner_2();
i4.show3();
//创建非静态的内部类对象,并访问静态变量。
Outer.Inner_4 i5 = new Outer().new Inner_4();
i5.show4();
}
}