内部类
- 是类中的五大成分之一(成员变量、方法、构造器、内部类、代码块),如果一个类定义在另一个类的内部,那么这个类就是内部类
- 当一个类的内部包含了一个整体的事务,且这个事务没必要单独设计时,就可以把这个事务设计成内部类
内部类四种形式:
- 成员内部类
就是类中的一个普通成员,类似普通的成员变量、成员方法
成员内部类不能直接new创建
要先new出外部类再.new 内部类
使用方法与普通的类一样
成员内部类可以正常访问外部类的实例成员和静态成员,可以把成员内部类的方法理解为一个正常的类方法,可以在成员内部类的类方法中通过外部类名.this.变量名拿到外部类的同名成员变量
test结果:
- 静态内部类
有static修饰的内部类,属于外部类自己持有
静态内部类的创建
使用方法与普通类一样
访问权限同静态方法一样,不可以访问外部类的实例成员,但是可以访问外部类的静态成员
test结果: - 局部内部类
定义在方法中、代码块中、构造器等执行体中的类
鸡肋语法,用处不大,知道就行 - 匿名内部类
一种特俗的局部内部类,所谓匿名,指的是程序员不需要为这个类声明名字
运行结果:
匿名内部类通常作为一个参数传递给方法
案例:设计一个方法使发出各种动物不同的叫声public class Test { public static void main(String[] args) { cry(new Animal(){ //直接调用匿名内部类对象作为实参 @Override public void cry() { //实现cry方法 System.out.println("喵喵喵的叫"); } }); } public static void cry(Animal a){ //设计一个方法用来发出各种动物的叫声 a.cry(); } } interface Animal { //接口Animal public abstract void cry(); }
运行结果:
匿名内部类不是主动去用,而是需要的时候被动去用,比如某些方法需要一个接口类型的对象,就需要在实参部分直接写一个匿名内部类
最终的核心目的是:简化代码