匿名内部类
内部类
在A类的内部中若存在一个B类,则B类为内部类,A类是B类的外部类。
publi class A {
class B{
// 内部类
}
}
内部类可以调用外部类的方法和属性,外部类需通过创建内部类对象来调用内部类的方法和属性。
外部类.内部类 对象 = new 外部类().new 内部类();
匿名内部类
匿名内部类就是没有名字的内部类
当我们实现接口时,需要先定义子类、重写方法、创建子类对象然后调用子类重写后的方法
匿名内部类可以简化实现接口的步骤,可以快速的写出一个虚拟类的子类或者一个接口的实现类,所以其实本质创建一个类继承自父类,所以普通类也可以使用匿名内部类
匿名内部类实现条件
必须实现一个父接口或者继承父类。
new 父类或接口 {
@Override
public void 方法名() {
代码块;
}
}
使用例子
定义接口
public interface People {
void eat();
}
实现匿名内部类
// 重写方法
new People() {
@Override
public void eat() {
System.out.println("人需要吃饭。");
}
}
//调用方法
new People() {
@Overried
public void eat() {
System.out.println("人需要吃饭。");
}
}.eat;
为匿名对象命名
People xiaoming = new People() {
@Overried
public void eat() {
System.out.println("小明需要吃饭。");
}
}
Xiaoming.eat(); // 通过命名调用。
将抽象类或接口作为参数
存在方法func
public static void func(People p) {
p.eat();
}
接口作为参数
直接作为参数传递
func(new People() {
@Override
public void eat() {
System.out.println("人需要吃饭。");
}
})
// 也可以给匿名内部类命名,然后传入方法
People xiaoming = new People() {
@Overried
public void eat() {
System.out.println("小明需要吃饭。");
}
}
func(xiaoming);
抽象类作为参数:
同接口做参数
匿名内部类双大括号
例子
addOption(new HashMap<Integer,String>(){{
put(1, "test");
put(2, "work");
}},quesId);
第一层括号表示定义了一个匿名内部类
第二层括号表示构造方法,因为该类没有名字。当执行时,改构造方法可以调用父类中的put函数进行初始化。
匿名内部类继承Object,里面自带equals方法,相当于重写了接口里的equals方法,同理,如果一个类实现多个接口,这些接口里又有相同的方法的话,只用重写一次就行了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本