帅雷必成c王 发表于 2022-7-2 17:28:02

匿名内部类

public class InnerClassExercise01 {
    public static void main(String[] args) {
      f1(new A() {
            @Override
            public void show() {
                System.out.println("这是一幅画");
            }
      });
    }

    public static voidf1(A a){
      a.show();
    }
}

interface A{
    void show();
}

这里看不懂呀,匿名内部类不是定义在方法里面的局部变量吗,为啥可以直接在主方法里面用 ,然后这个static调用也没看懂,类方法调用不是类名.方法吗

帅雷必成c王 发表于 2022-7-2 17:30:52

哦,不对这个匿名内部类看懂了,就是这个类方法调用没看懂

帅雷必成c王 发表于 2022-7-3 08:31:20

还有个小疑问,匿名内部类 ,看别人的解释是说没有名字所以只能调用一次,但是匿名内部类不也可以设置一个变量来接受吗,这样为啥还只能调用一次

Twilight6 发表于 2022-7-5 06:59:35

帅雷必成c王 发表于 2022-7-3 08:31
还有个小疑问,匿名内部类 ,看别人的解释是说没有名字所以只能调用一次,但是匿名内部类不也可以设置一个 ...


因为是匿名的,所以只有你调用那次创建了匿名内部类

第二次调用又是新的匿名内部类了,虽然结构上都是一样的,但是相当于你多次调用执行了多次的 new

小甲鱼水里游 发表于 2022-7-7 13:38:09

1. 匿名内部类是没有名字的类,你用变量接收了就不叫匿名内部类类
2. public class InnerClassExercise01 {
    public static void main(String[] args) {
      // 调用方法需要传入一个A类型的类,而你没有就得new一个A类型的类啊,而A是一个接口你就得实现接口的抽象方法啊
      f1(new A() {
            @Override
            public void show() {
                System.out.println("这是一幅画");
            }
      });
    }

    public static voidf1(A a){
      a.show();
    }
}

interface A{
    void show();
}

风华叶冷 发表于 2022-8-1 10:03:54

匿名内部类,只是设置方法,要调用方法才会显示重写的内容
页: [1]
查看完整版本: 匿名内部类