Java--匿名内部类

匿名内部类:是内部类的简化写法。它的本质是一个带具体实现的父类或者父接口的匿名的子类对象,开发中最常用的就是匿名内部类。

1. 步骤

正常定义类的步骤:

  1. 定义子类
  2. 重写接口中的方法
  3. 创建子类对象
  4. 调用重写后的方法
interface Swim {
    public abstract void swimming();
}
// 1. 定义接口的实现类
class Student implements Swim {
    // 2. 重写抽象方法
    @Override
    public void swimming() {
        System.out.println("狗刨式...");
    }
}
public class Demo07 {
    public static void main(String[] args) {
        // 3. 创建实现类对象
        Student s = new Student();
        // 4. 调用方法
        s.swimming();
    }
}

以上就是内部类的调用方法,我们的目的是调用这个方法,那么能不能简化一下呢?吧以上的四步合成一步呢?匿名内部类就是这样做的快捷方式。

匿名内部类前提

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

匿名内部类格式

new 父类名或者接口名(){
    // 方法重写
    @Override
    public void method() {
        // 执行语句
    }
};
使用方式

以接口为例,匿名内部类的使用,代码如下:
创建匿名内部类,并调用:

interface Swim {
    public abstract void swimming();
}
// 1. 定义接口的实现类
class Student implements Swim {
    // 2. 重写抽象方法
    @Override
    public void swimming() {
        System.out.println("狗刨式...");
    }
}
public class Demo07 {
    public static void main(String[] args) {
        // 使用匿名内部类
new Swim() {        
@Override            
public void swimming() {            
System.out.println("自由泳...");                
}            
}.swimming();        
        // 接口 变量 = new 实现类(); // 多态,走子类的重写方法
        Swim s2 = new Swim() {
            @Override
            public void swimming() {
                System.out.println("蛙泳...");
            }
        };
        s2.swimming();
        s2.swimming();
    }
}
匿名内部类的本质
  1. 定义一个没有名字的内部类
  2. 这个类实现了Swim接口
  3. 创建了这个没有名字的类的对象
匿名内部类的作用

简化代码

匿名内部类的使用场景

通常在方法的形式参数是接口或者抽象类时,也可以将匿名内部类作为参数传递。代码如下:

interface Swim {
    public abstract void swimming();
}
// 1. 定义接口的实现类
class Student implements Swim {
    // 2. 重写抽象方法
    @Override
    public void swimming() {
        System.out.println("狗刨式...");
    }
}
public class Demo07 {
    public static void main(String[] args) {
        // 普通方式传入对象
        // 创建实现类对象
        Student s = new Student();
       
        goSwimming(s);
        // 匿名内部类使用场景:作为方法参数传递
        Swim s3 = new Swim() {
            @Override
            public void swimming() {
                System.out.println("蝶泳...");
            }
        };
        // 传入匿名内部类
        goSwimming(s3);
        // 完美方案: 一步到位
        goSwimming(new Swim() {
            public void swimming() {
                System.out.println("大学生, 蛙泳...");
            }
        });
        goSwimming(new Swim() {
            public void swimming() {
                System.out.println("小学生, 自由泳...");
            }
        });
    }
    // 定义一个方法,模拟请一些人去游泳
    public static void goSwimming(Swim s) {
        s.swimming();
    }
}

end

匿名内部类可以引申成为‘入‘表达式‘入‘表达式也可以简化到方法引用,后文会一一介绍,谢谢您的阅读!

  • 9
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
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 ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值