定义:在一个类中定义一个类,就叫内部类。

  成员内部类:定义在类中方法外的叫成员内部类

  局部内部类:定义在方法中的叫局部内部类

成员内部类

  a、创建不带修饰符的普通成员内部类对象的格式:外部类名.内部类名 对象名 = new 外部类对象().new 内部类对象();

    b、私有成员内部类对象只能在所属外部类创建,如果使用私有内部类的方法,先创建外部类对象,在通过外部类的方法访问私有内部类方法;

    c、创建静态成员内部类对象的格式:外部类名.内部类名 对象名 = new 外部类对象.内部类对象();

 

复制代码
public class InnerTest {

    public static void main(String[] args) {

        // 创建不带修饰符的普通成员内部类对象的格式:外部类名.内部类名 对象名 = new 外部类对象().new 内部类对象();
        Outer.Inner inner = new Outer().new Inner();
        System.out.println(inner.num);
        inner.show();

        // 私有成员内部类对象只能在所属外部类创建,如果使用私有内部类的方法,先创建外部类对象,在通过外部类的方法访问私有内部类方法;
        Outer o = new Outer();
        o.method();

        // 创建静态成员内部类对象的格式:外部类名.内部类名 对象名 = new 外部类对象.内部类对象();
        Outer.Inner2 inner2 = new Outer.Inner2();
        inner2.show();
        // 静态成员内部类中的静态方法调用格式
        Outer.Inner2.show1();

        // 局部内部类只能在方法中定义,访问时只能在方法中创建对象访问
        o.test();

    }

}

class Outer {
    int a = 5;
    private int b = 6;

    public void outherShow() {
        Inner i = new Inner();
        System.out.println(i.num);
    }

    // 成员内部类
    class Inner {
        int num = 10;

        public void show() {
            // 内部类访问外部类成员可以直接访问,包括私有
            System.out.println(a);
            System.out.println(b);
            System.out.println("成员内部类。。。");
        }
    }

    // 私有成员内部类
    private class Inner1 {
        public void show() {
            // 内部类访问外部类成员可以直接访问,包括私有
            System.out.println("私有成员内部类。。。");
        }
    }

    public void method() {
        Inner1 i = new Inner1();
        i.show();
    }

    // 静态成员内部类
    static class Inner2 {
        public void show() {
            // 内部类访问外部类成员可以直接访问,包括私有
            System.out.println("静态成员内部类。。。");
        }

        public static void show1() {
            // 内部类访问外部类成员可以直接访问,包括私有
            System.out.println("静态成员内部类静态成员方法。。。");
        }
    }

    public void test() {

        // 局部内部类 只能定义在方法中,只能在方法中创建对象访问
        class Inner3 {
            public void show() {
                System.out.println("局部内部类。。。");
            }
        }

        Inner3 i3 = new Inner3();
        i3.show();
    }
}
复制代码