内部类

内部类(选修)

源代码

内部类定义

public class Outer {
            private int id = 10; //外部类中私有属性
            public void out(){
                //这是一个外部类方法
            }
            public class Inner{ //这是一个内部类
                public void getId(){
                  //这是一个内部类方法  
                  System.out.println(id);//内部类可以获取到外部类私有变量
        }
    }
}

内部类实例化

Outer outer = new Outer();
Outer.Inner inner = outer.new Inner(); //利用外部类定义的对象outer来实例化内部类

匿名内部类(必修)

匿名内部类是一个继承了该类或者实现了该接口的子类匿名对象

这里的类可以是具体类也可以是抽象类

直接调用类中方法

new Outer().out; //不实例化对象,只初始化类,也可以调用类中方法

在开发中的使用*

new 接口直接给一个接口的对象,在执行体内重写方法,也叫做匿名内部类

public class Application {
    public static void main(String[] args) {
        //多态,接口引用指向匿名内部类对象
        UserService userService = new UserService(){
            //重写hello方法
            @Override
            public void hello() { 
                System.out.println("hello");
            }
        };
        //可通过引用变量userService调用接口中重写过的方法
        userService.hello();
    }
    interface UserService{ //一个接口
        void hello();
    }
}