『Java』成员内部类 匿名内部类

成员内部类

成员方法类是定义在一个类中的方法外的类,例如:

public class Outer{ // 外部类
	class Inner { // 内部类
		// 内部类成员
	} 
    
    // 外部类成员
}

成员内部类可以看成是外部类的一个成员,所以可以拥有private public protected (default)四种修饰符。

Outer.java编译之后,生成的字节码文件如下:

Outer$Inner.class 成员内部类的字节码文件
Outer.class 外部类的字节码文件

成员内部类的访问特点:

  • 内部类可以直接访问外部类的所有成员变量和方法,包括private修饰的成员

    如果内部类的成员和外部类成员同名,在内部类中访问外部成员的方式为:

    外部类.this.成员变量
    外部类.this.成员方法
    
  • 外部类要访问内部类的成员,必须建立内部类对象。

如果想在另一个类中创建某一个类(外部类)中的成员内部类的对象,语法格式如下:

外部类名.内部类名 c = new 外部类名().new 内部类名();

匿名内部类

匿名内部类必须继承一个父类或者实现一个接口

使用格式:

父类名/接口名 obj = new 父类名/接口名() {
    // 重写父类或者接口方法
}

例如:

public class Test {
    public static void main(String[] args) {
        MyInterface obj1 = new MyInterfaceImpl();
        obj1.method();
 
        // 实现类只需要用一次但是还得单独写一个实现类,此时可以使用匿名内部类
        MyInterface obj2 = new MyInterface() {
            @Override
            public void method() {
                System.out.println("匿名内部实现类覆盖重写了接口方法");
            }
        }; // 【不能忘记这里有个分号】
        obj2.method();
    }
}

interface MyInterface {
    public abstract void method();
}

class MyInterfaceImpl implements MyInterface{
    @Override
    public void method() {
        System.out.println("实现类覆盖重写了接口方法");
    }
}
原文地址:https://www.cnblogs.com/xxmmqg/p/14423610.html