JavaSE——面向对象高级三(2/5)-匿名内部类(重点)-认识匿名内部类、匿名内部类的应用场景

简介: JavaSE——面向对象高级三(2/5)-匿名内部类(重点)-认识匿名内部类、匿名内部类的应用场景

匿名内部类【重点】

认识匿名内部类

  • 匿名内部类就是一种特殊的局部内部类;所谓匿名:指的是程序员不需要为这个类声明名字

格式

new 类或接口(参数值...){

       类体(一般是方法重写);};

new Animal(){
    @Override
    public void cry(){
    }
};
  • 特点: 匿名内部类本质就是一个子类,并会立即创建出一个子类对象。
  • 作用:用于更方便的创建一个子类对象。

代码具体体现:

public class Test{
    public static void main(String[] args){
        Animal a = new Animal(){
            @Override
            public void cry(){
                System.out.println("喵喵喵地叫~");
            }
        };
        a.cry();
    }
}
 
abstract class Animal{
    public abstract void cry();
}

其效果相当于:

public class Test{
    public static void main(String[] args){
      Animal a = new Cat();
        a.cry();
    }
}
class Cat extends Animal{
     @Override
     public void cry(){
        System.out.println("喵喵喵地叫~");
    }
}
 
abstract class Animal{
    public abstract void cry();
}

匿名内部类的应用场景

  • 通常作为一个参数传输给方法

案例演示

需求:猫、狗参加游泳比赛。

先创建接口,因为是游泳比赛,接口让猫和狗都要去重写他们各自的方法。

public interface Swimming{
    void swim();
}

再设计一个方法,可以接收Swimming接口的一切实现类对象进来参加游泳比赛。

public static void go(Swimming s){
    System.out.println("开始--------------");
    s.swim();
}

最后就可以开始实现了

public class Tset{
    public static void main(String[] args){
        go(); //这里要传参数,而且参数的类型是接口对象
        //所以此时可以直接用匿名内部类作为参数传入。
 
        go(new Swimming(){
            @Override
            public void swim(){
                System.out.println("狗游泳游得飞快");
            }
        });
    }
}

没有直接作为参数传输给方法的话,是这样的:

public class Tset{
    public static void main(String[] args){
        Swimming s1 = new Swimming(){
            @Override
            public void swim(){
            System.out.println("狗游泳游得飞快");
        };
 
        go(s1);
    }
}

匿名内部类大部分时候不是主动去用,而是被动去用的,需要用的时候才用的;一般是调用别人的API时,需要给一个对象,而这个对象正好是接口类型的,那么就知道此时要用匿名内部类了。


1、匿名内部类的书写格式是什么样的?


new 类或接口(参数值...){

       类体(一般是方法重写);

};

(注意要写分号)

new Animal(){
    @Override
    public void cry(){
    }
};

2、匿名内部类有啥特点?

  • 匿名内部类本质就是一个子类,并会立即创建出一个子类对象

3、匿名内部类有啥作用、应用场景?

  • 可以更方便的创建出一个子类对象。
  • 匿名内部类通常作为一个参数传输给方法。

END



目录
相关文章
|
安全 Linux 数据安全/隐私保护
Linux 忘记密码解决方法
Linux 忘记密码解决方法
228 2
Linux 忘记密码解决方法
|
Dart API C语言
Dart ffi 使用问题之想在C/C++中创建异步线程来调用Dart方法,如何操作
Dart ffi 使用问题之想在C/C++中创建异步线程来调用Dart方法,如何操作
|
Java 数据库连接 API
seata回滚问题之全局异常如何解决
Seata是一款开源的分布式事务解决方案,旨在提供高效且无缝的分布式事务服务;在集成和使用Seata过程中,开发者可能会遇到不同的异常问题,本合集针对Seata常见异常进行系统整理,为开发者提供详细的问题分析和解决方案,助力高效解决分布式事务中的难题。
2030 104
|
JavaScript
Vue2走马灯扩展版(Carousel)
这篇文章介绍了如何在Vue 3框架中创建一个可自定义的走马灯(Carousel)组件,支持自动播放、导航、分页和响应用户交互等功能。
635 0
Vue2走马灯扩展版(Carousel)
PowerShell实战:Get-Item命令使用详解
【2月更文挑战第10篇】Get-Item 命令使用频率非常高,主要是获取位于指定位置的项。 一般搭配使用通配符 (*) 来获取项目的包含的项目。如果不使用*的话只是获取当前项的内容。
如何使用mitmproxy 修改http code
如何使用mitmproxy 修改http code
|
JavaScript Java 测试技术
基于springboot+vue.js的工作流程管理系统附带文章和源代码设计说明文档ppt
基于springboot+vue.js的工作流程管理系统附带文章和源代码设计说明文档ppt
260 0
|
机器学习/深度学习 数据采集 数据挖掘
【机器学习】普通最小二乘法和ridge回归有什么区别?
【5月更文挑战第21天】【机器学习】R-squared系数有什么缺点?如何解决?【机器学习】普通最小二乘法和ridge回归有什么区别?
|
Ubuntu Linux 数据安全/隐私保护
Linux Ubuntu crontab 添加错误 提示:no crontab for root - using an empty one 888
错误提示: no crontab for root - using an empty one 888
1277 1
Linux Ubuntu crontab 添加错误 提示:no crontab for root - using an empty one 888
|
人工智能 JavaScript 前端开发
AI问答:JSBridge / WebView 与 Native 通信
AI问答:JSBridge / WebView 与 Native 通信
538 0

热门文章

最新文章