内部类

1.成员内部类

(1)作为外部类的一个成员变量

(2)可以直接访问外部类的所有成员,包括私有

(3)可以添加任意访问修饰符

class Outer {
    private int age = 99;
    String name = "Coco";

    public class Inner {
        String name = "Jayden";

        public void show() {
            System.out.println(Outer.this.name); //Coco
            System.out.println(name); //Jayden
            System.out.println(age); //99
        }
    }

    public static void main(String[] args) {
        Outer o = new Outer();
        Inner in = o.new Inner();
        in.show();
    }
}

2.静态内部类

(1)作为外部类的一个成员变量,用static修饰

(2)可以直接访问外部类的所有静态成员,包括私有,但是不能访问外部类的非静态成员

(3)可以添加任意访问修饰符

class Outer{
    private int age = 99;
    static String name = "Coco";
    public static class Inner{
        String name = "Jayden";
        public void show(){
            System.out.println(Outer.name); //Coco
            System.out.println(name); //Jayden
        }
    }
    public static void main(String[] args){
        Inner i = new Inner();
        i.show();
    }
}

3.局部内部类

(1)作为外部类的一个局部变量,定义在方法或者代码块中

(2)可以直接访问外部类的所有成员,包括私有

(3)没有访问修饰符,但是可以用final修饰

class Outer{
    public void show(){
        final int a = 25;
        int b = 13;
        class Inner{
            int c = 2;
            public void print(){
                System.out.println(a); //25
                System.out.println(c); //2
            }
        }
        Inner i = new Inner();
        i.print();
    }
    public static void main(String[] args){
        Outer o = new Outer();
        o.show();
    }
}

4.匿名内部类

(1)作为外部类的一个局部变量,定义在方法或者代码块中

(2)可以直接访问外部类的所有成员,包括私有

(3)没有访问修饰符

class OuterClass {
    public InnerClass getInnerClass(final int num, String str2) {
        return new InnerClass() {
            int number = num + 3;

            public int getNumber() {
                return number;
            }
        };
    }

    public static void main(String[] args) {
        OuterClass out = new OuterClass();
        InnerClass inner = out.getInnerClass(2, "chenssy");
        System.out.println(inner.getNumber()); //5
    }
}

interface InnerClass {
    int getNumber();
}
posted @ 2022-04-06 11:38  shaun23  阅读(33)  评论(0)    收藏  举报