Java匿名内部类的三种使用方式

  • Post author:
  • Post category:java


1.### 需求:

​ 在控制台输出”HelloWorld”

interface Inter {
    void show();
}
class Outer{


    public static Inter method() {

        return new Inter() {
            @Override
            public void show() {
                System.out.println("HelloWorld");
            }
        };
    }


}
public class OuterDemo {
    public static void main(String[] args) {
        Outer.method().show();
    }
}

注:这种方式是将匿名内部类(接口实现类对象)作为方法method()的返回值return,因此在语法上return后的对象可以直接调用重写的接口方法show()。

2.### 需求:

​ 在测试类Test中创建A的对象a并调用成员方法methodA(),要求用两种方式实现

public class OuterDemo2 {
    public static void main(String[] args) {
        //1.普通调用方式
        A a = new A();
        a.methodA(new InterA() {
            @Override
            public void showA() {
                System.out.println("HelloWorld");
            }
        });
        //2.匿名内部类直接调用
        new InterA(){
            @Override
            public void showA() {
                System.out.println("HelloWorld");
            }
        }.showA();
    }
}

interface InterA {
    void showA();
}

class A {
    public void methodA(InterA a) {
        a.showA();
    }
}

3.### 需求:

​ 在测试类Test中创建B的对象b,并调用成员方法methodB

public class Test {
    public static void main(String[] args) {
        B b = new B(new InterB() {
            @Override
            public void showB() {
                System.out.println("HelloWorld");
            }
        });
        b.methodB();

        new InterB(){
            @Override
            public void showB() {
                System.out.println("HelloWorld");
            }
        }.showB();
    }
}

//定义一个接口
interface InterB {
    void showB();
}

//目标:调用成员方法methodB
class B {
    InterB b;
    public B(InterB b){
        this.b = b;
    }
    public void methodB(){
        b.showB();
    }
}

注:2、3中,匿名内部类分别实现了作为(接口实现类对象直接调用重写的接口方法)、作为对象由method()方法的形参或类的成员变量接收,并作为接口方法的调用主体的两种方法。



版权声明:本文为weixin_43805496原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。