内部类

一般情况下,类和类之间时相互独立的,内部类的意思是打破这种独立,让一个类成为另外一个类的内部信息,和成员变量、成员方法同等级别。

成员内部类

就是将内部类当成外部类的成员变量对待。

/**
 * @author Pickle
 * @version V1.0
 * @date 2024/3/7 11:58
 */
public class OuterClass {
    //成员变量
    private String outerName = "outer Class";
    //成员方法
    public void display(){
        System.out.println("OuterClass display");
        System.out.println(outerName);
    }
    //内部类
    public class InnerClass{
        private String innerName;
        public void display(){
            System.out.println("InnerClass display");
            System.out.println(innerName);
        }

        public InnerClass(){
            innerName = "inner Class";
        }
    }

    public static void main(String[] args) {
        final OuterClass outerclass = new OuterClass();
        outerclass.display();
        //final InnerClass innerClass = new InnerClass(); 这种方法会报错,因为InnerClass依赖于外部类
        OuterClass.InnerClass innerClass = outerclass.new InnerClass();
        innerClass.display();
    }

}

局部内部类

/**
 * @author Pickle
 * @version V1.0
 * @date 2024/3/7 11:58
 */
public class OuterClass {
    //成员变量
    private String outerName = "outer Class";
    //成员方法
    public void display(){
        //局部内部类
        class InnerClass{
            private String innerName = "inner Class";
            public void display(){
                System.out.println("InnerClass display");
                System.out.println(innerName);
            }
        }
        InnerClass innerClass = new InnerClass();
        innerClass.display();
    }

    public static void main(String[] args) {
        final OuterClass outerClass = new OuterClass();
        outerClass.display();
    }

}

静态内部类的构造不需要依赖于外部类



/**
 * @author Pickle
 * @version V1.0
 * @date 2024/3/7 11:58
 */
public class OuterClass {
    //成员变量
    private String outerName = "outer Class";
    //成员方法
    public void display(){
        System.out.println(outerName);
    }

    static class InnerClass{
        private String innerName = "inner class";
        public void display(){
            System.out.println(innerName);
        }
    }

    public static void main(String[] args) {
        final InnerClass innerClass = new InnerClass();
        innerClass.display();
    }

}

匿名内部类

对于一个接口不用单独实现,在用到这个接口的地方直接自定义实现方法,灵活使用。

 /**
 * @author Pickle
 * @version V1.0
 * @date 2024/3/7 14:43
 */
interface Animal {
    void eat();
}

public class Demo {
    public void function(Animal a){
        a.eat();
    }
    public static void main(String[] args) {
        final Demo demo = new Demo();
        demo.function(new Animal() {
            @Override
            public void eat() {
                System.out.println("eat");
            }
        });
    }
}

使用Lambda表达式简化匿名内部类

/**
 * @author Pickle
 * @version V1.0
 * @date 2024/3/7 14:43
 */
interface Animal {
    void eat();
}

public class Demo {
    public void function(Animal a){
        a.eat();
    }
    public static void main(String[] args) {
        final Demo demo = new Demo();
        demo.function(()->{
            System.out.println("eat");
        });
    }
}

posted @ 2024-03-07 14:53  破忒头头  阅读(21)  评论(0)    收藏  举报