Java内部类(一)——匿名内部类

Java匿名内部类

顾名思义,就是没有名字的内部类。表面上看起来它们似乎有名字,实际上不是它们的名字。 ——百度百科

特性说明

  • 没有名字的类
  • 既然这个类没有名字,那么就只能使用一次,进而简化代码编写
  • 前提条件:必须继承一个父类或者实现一个接口

声明格式

new ParentName(){
    ... // 内部类的定义
}

实例分析

abstract class Animal {
    public abstract void run();
}

class Fish extends Animal {
    public void run() {
        System.out.println("Swimming!");
    }
}

public class Main {
    public static void main(String[] args) {
        Fish fish = new Fish();
        fish.run();
    }
}

// 运行结果:Swimming!

如果我们这个类只使用一次,那么我们创建这样一个类岂不是很浪费?所以就有了匿名内部类的出现。

abstract class Animal {
    public abstract void run();
}

public class Main {
    public static void main(String[] args) {
        Animal fish = new Animal(){
            public void run() {
                System.out.println("Swimming!");
            }
        };
    }
}

// 运行结果:Swimming!

对于接口,和抽象类的使用是一样的。


也就是说,只要一个类是抽象的或是一个接口,那么其子类中的方法都可以使用匿名内部类来实现。最常用的情况就是在多线程的实现上,因为要实现多线程必须继承Thread类或是继承Runnable接口。

public class Main {
    public static void main(String[] args) {
        Thread thread = new Thread(){
            @Override
            public void run(){
                System.out.println("你好,匿名内部类!");
            }
        }
        thread.start();
    }
}

// 运行结果:你好,匿名内部类!

注意事项

  • 使用匿名内部类时,必须是继承一个类或者实现一个接口,但是两者不可兼得。
  • 匿名内部类中不能定义构造函数。
  • 匿名内部类中不能存在任何的静态成员变量和静态方法。
  • 匿名内部类不能是抽象的,它必须要实现继承的类或者实现的接口的所有抽象方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,匿名内部类是一种特殊的内部类,它没有显式的类名。匿名内部类通常用于创建一个只需要使用一次的类的实例。匿名内部类可以通过继承一个类或实现一个接口来实现。 比较匿名内部类的方式有两种。第一种是通过继承一个类来创建匿名内部类。在这种情况下,匿名内部类会继承指定类的所有方法和属性,并可以重写其中的方法。通过重写方法,可以实现自定义的行为。 第二种方式是通过实现一个接口来创建匿名内部类。在这种情况下,匿名内部类会实现指定接口的所有方法,并可以在方法中定义自己的逻辑。 例如,可以使用匿名内部类来实现一个接口的方法,如下所示: ``` Interface01 interface01 = new Interface01() { @Override public void show() { System.out.println("使用了匿名内部类"); } }; interface01.show(); ``` 在这个例子中,我们创建了一个匿名内部类,实现了Interface01接口的show()方法,并在方法中输出了一条信息。 需要注意的是,匿名内部类在编译期间会生成一个以$编号结尾的class文件,即它被识别为一个真实的类。在编译前(java文件)时,它是以匿名的形态存在的。\[2\]\[3\] #### 引用[.reference_title] - *1* [【java笔记】Java中的匿名类和匿名内部类](https://blog.csdn.net/zuzhiang/article/details/118016420)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Java基础——匿名内部类](https://blog.csdn.net/qq_52519008/article/details/127154696)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值