Javase学习09-匿名内部类

《JavaSE系列教程》 本专栏内容是为零基础正在学习Java的学习者量身定制的学习路线及方案,本教程字数超20w+,插图超过400+,知识体系极其全面,案例极其丰富。本配备有专门的学习群及学习视频,读者可加学习群与正在学习该阶段的人一同学习,有任何不懂的也可以观看于此教程配套的学习视频。 阅读详情

学习09-匿名内部类

1. 什么是匿名内部类?

1.1 定义

匿名内部类就是没有名称的内部类

1.2 说明

在某一个类或者接口只有一个抽象方法时,如果我们不想去搞它的子类或者实现类 ,那么我们可以使用匿名内部类来实现它。

1.3 前提
  1. 必须是类或者接口

  2. 格式:

    //相当于是一个子类实现类或接口的实现类
    new 类名/接口名(){
        重写抽象方法
    }
    

2. 使用方式

2.1 使用传统方式调用抽象类方法
public class Demo01 {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.eat();
    }
}
abstract class Animals {
    abstract void eat();
}
class Dog extends Animals{

    @Override
    void eat() {
        System.out.println("狗吃肉");
    }
}

结果:

狗吃肉

可见,该Animals抽象类只有一个抽象方法,并且只需要调用一次。如此写一个Dog实现类太麻烦且无意义。

这时,我们就可以使用匿名内部类来调用抽象类中的方法。

2.2 使用匿名内部类调用抽象类方法
public class Demo01 {
    public static void main(String[] args) {
        // 整体相当于Animals的子类对象
        new Animals() {
            @Override
            void eat() {
                System.out.println("狗吃肉");
            }
        };
        //
    }
}
abstract class Animals {
    abstract void eat();
}

使用匿名内部类来调用父类eat()方法有两种方式:

第1种:

new Animals() {
    @Override
    void eat() {
        System.out.println("狗吃肉");
    }
}.eat();

第2种:

//前面说过,该整体相当于是Animals抽象类的子类对象,父类调用子类对象,这就是多态的体现形式。
Animals a = new Animals() {
    @Override
    void eat() {
        System.out.println("狗吃肉");
    }
};
a.eat();

通过匿名内部类访问局部变量时,在JDK1.8版本之前必须要在局部变量前加final关键字,在该版本之后会自动添加,虽然不显示,但实际存在,无法对菊部变量重新赋值

String type = "二哈";
Animals a = new Animals() {
    @Override
    void eat() {
        System.out.println( type + "在吃肉");
    }
};
a.eat();
2.3 使用匿名内部类调用接口方法
public class Demo02{
    public static void main(String[] args) {
        new Inter(){
            @Override
            public void method() {
                System.out.println("method!!!");
            }
        }.method();
    }

}
interface Inter{
    void method();
}
2.4 匿名内部类的作用

作为方法参数的时候进行传递:

当一个方法需要调用接口中的方法时,需要传入一个接口的实现类。

按传统的方法需要写一个接口的实现类重写接口中的抽象方法,然后new一个实现类对象传入到方法中

/**
 * @author: TSCCG
 * @date: 2021/5/19
 */
public class Demo02{
    public static void main(String[] args) {
        Son son = new Son();
        function(son);
    }
    //function方法需要一个接口的实现类 Inter inter = new Inter();
    public static void function(Inter inter) {
        inter.method();
    }

}
class Son implements Inter {

    @Override
    public void method() {
        System.out.println("method!!!");
    }
}
interface Inter{
    void method();
}

这在接口中只有一个方法且只调用一次时过于麻烦,使用匿名内部类即可代替实现类

/**
 * @author: TSCCG
 * @date: 2021/5/19
 */
public class Demo02{
    public static void main(String[] args) {
        function(
                //匿名内部类相当于传递了一个实现类到function里
                new Inter() {
                    @Override
                    public void method() {
                        System.out.println("method!!!");
                    }
                }
        );
    }
    //function方法需要一个接口的实现类 Inter inter = new Inter();
    public static void function(Inter inter) {
        inter.method();
    }

}
interface Inter{
    void method();
}
);
}
//function方法需要一个接口的实现类 Inter inter = new Inter();
public static void function(Inter inter) {
    inter.method();
}

}
interface Inter{
void method();
}


从零构建工业级SPI-CAN网关:CH347与CH9431的软硬件协同设计实战 本文详细介绍了基于CH347和CH9431芯片构建工业级SPI-CAN网关的完整方案。通过硬件架构设计、Linux驱动定制、并发处理优化和EMC抗干扰测试,实现高可靠性通信网关,适用于工业自动化和汽车电子等严苛环境。 阅读详情

相关推荐

逆向实战:Soul聊天协议加密与Frida绕过检测

本文详细解析了Soul聊天协议逆向分析的全过程,重点介绍了如何利用Frida绕过应用的反调试检测机制。通过静态分析定位关键SO库,并编写Frida脚本动态Hook线程创建函数,成功实现对抗。文章还进一步追踪了基于DES算法的加密流程,并探讨了协议数据结构的解析方法,为移动应用安全研究提供了实战参考。

2w3e4r5t6y的博客 1132

Java 为什么我们需要匿名内部类(使用及作用)

1.匿名内部类的基本格式 new 类名或接口名(){ //重写方法 };   我们平时new一个对象的基本格式为类名或接口名 对象名=new 类名或接口名(),形式上是有区别的,但两者其实都是新建了个对象,不要被名字中有个类搞混。重写方法常见于子类继承父类和子类实现接口。   本质:一个继承该类或实现该接口的子类的匿名对象。 2.使用方式 如下创建People类,类中有run()方法。 p...

优快云_KONGlX的博客 869

六款经典限流保护电路设计:从原理到实战的完整指南

在电子系统设计中,过流保护是确保电路可靠运行的基础技术。其核心原理是通过电流采样、比较与执行三个环节构成闭环控制,将不可见的电流转化为可测量的电压信号进行处理。这项技术的核心价值在于防止因短路、堵转或异常负载导致的元器件损坏,从而提升整个系统的稳定性和安全性。在电源管理、电机驱动和精密仪器等应用场景中,限流保护电路都是不可或缺的安全屏障。本文深入解析了基于运放和晶体管搭建的经典方案,并重点探讨了采样电阻选型、参考电压生成以及PCB布局中的开尔文连接等工程实践要点,帮助读者从热门的DIY项目到工业控制都能实现

weixin_29166013的博客 352

Java 匿名内部类、Lambda、接口的三种类型方法

从执行接口可以看得出,匿名内部类的实质就是实例化接口实现类,可以在不添加实现类的基础上实现接口对应的方法,以降低代码量。默认被public abstract 关键字修饰,实现接口的类必须实现这些抽象方法。这样就解决了接口升级时需要不断添加新的接口来继承原先接口的接口冗杂的问题。可以看到lambda表达式不要太简洁。只允许被静态调用,不可以被实现。

qq_50909707的博客 2125

cesium 高程数据使用

cesium 高程数据使用高程数据下载高程数据切片简单数据服务 高程数据下载 使用地理空间数据云平台免费提供的高程数据。地理空间云平台 点击列表中的下载得到数据压缩包。例如:ASTGTM2_N22E114.zip 高程数据切片 使用cesium实验室工具对下载得到的压缩包进行切片。cesium实验室 切片得到的文件夹目录。 简单数据服务 使用nodejs的koa启动简单的资源服务。koajs 项目根目录新建data文件夹,在新建dem文件夹放高程数据。 注意目录自行更换,这里是./data/dem

哎哟这个凉白白的博客 1811

STGCN+YOLOV8行为分类

使用关节点追踪网络获取关节点数据,以yolo-v8网络为例,获取2D关节点数据。此次实验采用KTH动作识别数据集,包含人步行、慢跑、跑步、拳击、挥手和拍手等动作。

SDADASDAF的博客 3891

内部类小练习

内部类的小练习 如下: interface Inter{ public abstract void method(); } class Test { //补足代码,通过匿名内部类 } class InnerClassDemo2 { public static void main(String[] args){ Test.function().method(); ...

weixin_30663471的博客 298

京东联盟h5st(3.1)加密参数逆向实战与反爬对抗策略

本文详细解析了京东联盟h5st(3.1)加密参数的逆向分析与实战破解过程。通过接口分析定位关键加密函数,拆解h5st结构并还原其基于SHA256和HMAC-SHA256的加密逻辑,最终使用Python集成JavaScript环境成功复现加密算法,并分享了应对反爬的频率限制、IP封禁及算法升级等对抗策略。

weixin_29246195的博客 1738

匿名内部类

匿名内部类

weixin_58778545的博客 456

基于Pycatia的智能孔特征识别技术:无参模型圆心自动化提取方案

基于Pycatia的智能孔特征识别技术:无参模型圆心自动化提取方案

KE17RS的博客 2877

模糊控制 (Fuzzy Control) 算法详解及案例分析

模糊控制是一种基于模糊逻辑的控制策略,其核心思想是通过模糊规则和模糊推理实现对复杂系统的控制。模糊控制不依赖于精确的数学模型,而是通过模拟人类的决策过程来处理不确定性和非线性问题。

闲人编程的博客 3657

javase学习目录——day09

java学习目录——day09 包名1:com.lzg.java ArrayUtil.java、ArrayUtilTest.java 求数组最大值、反转、平均值、总和、复制、冒泡排序、遍历 InstanceTest.java:一、万事万物皆对象 二、内存解析说明 三、匿名对象 包名2:com.lzg.java1 OverLoad.java:方法的重载 ValueTransferTest.ja...

deciduousli的博客 169

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

刘意JavaSE 学习笔记——总纲

开始学习JavaSE了,记录下自己学习的进程。   学习大纲   1 开发环境配置 day01 配置 2 基础语法(基本差不多,看一下就好) day02 命名规则,进制转换 day03 运算符,if语句 day04 switch,for,while,break,continue,return语句 day05 方法 重载 一维数组 day06 二维数组 类,对象,内存解析 以...

desperatecat的博客 3851

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

JavaSE集合day09

JavaSE集合day09 第一章 Collection集合 1.1集合概述 集合: 集合是java中提供的一种容器,可以用来存储多个数据。 集合和数组的区别 数组的长度是固定的,集合的长度是可变的。 数组中存储的是同一类型的元素,可以存储基本数据类型值。集合存储的都是对象,而且对象的类型可以不一致。在开发中一般当对象多的时候,使用集合进行存储。 1.2集合框架 1.3Collection常用功能 public boolean add (E e) :把给定的对象添加到当前集合中。 public

呆呆小哥的秘密基地 136

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

JavaSE09(JavaSE库存管理03[代码])

JavaSE库存管理---代码一、Menu .java二、UserService.java三、UserDao .java四、BaseDao.java五、User .java 一、Menu .java package com.lj.view; import java.util.List; import java.util.Scanner; import com.lj.model.User; import com.lj.service.UserService; public class Menu { UserS

Li的博客 265

JavaSE面向对象之接口09

JavaSE面向对象之接口09 第一章 接口 1.1 概述 接口,是Java语言中一种引用类型,是方法的集合,如果说类的内部封装了成员变量、构造方法和成员方法,那么 接口的内部主要就是封装了方法,包含抽象方法(JDK 7及以前),默认方法和静态方法(JDK 8),私有方法 (JDK 9)。 接口的定义,它与定义类方式相似,但是使用 interface 关键字。它也会被编译成.class文件,但一定要明确它并 不是类,而是另外一种引用数据类型。 引用数据类...

helloworld工程师的博客 261

JavaSE[本人复习SE时的记录,适合已经学习完JavaSE的朋友复习回顾]

00基本语法文档注释变量分类运算符流程控制数组 文档注释 ①文档注释用javadoc来解析,在Dos中输入一下命令 ②javadoc -d (要生成的)文件夹的名字 -author -version 文件名(.java结尾的文件名) ③执行完命令后,会在当前的目录下创建一个文件夹,其中的index.html即为该程序的说明文档 变量分类 运算符 流程控制 数组 ...

ZZWDN_旺小白的博客 3082

JavaSe基础2022年12月09日学习内容

JavaSe基础 2022-12-09面向对象 final关键字、向下转型、多态、抽象类

森森学习Java的分享 119

JavaSE基础(Day09)

今天的笔记是JavaSE基础篇章的最后一天,学习内容为SE知识的重中之重集合。还利用之前基础篇所学完成了一个代码量极其小的小小小项目的练习作为基础篇的收尾!明天将进入进阶篇第一天的学习!

A1642745249的博客 866

JavaSE09

package day09; /** * 排序集合 * 排序集合可以使用集合的工具类 * java.util.Collections * * 其定义很多静态方法,用于操作集合,其中sort()方法是对 * List集合进行自然排序(升序) */ import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Collection_sort { public stat

Judith__的博客 253

【JavaSE】JavaSE系列讲解文章

一、简介 JavaSE系列讲解是我本人学习JavaSE过程中所作的笔记,视频教程来源是B站尚硅谷宋红康老师的JavaSE: 尚硅谷Java入门视频教程 所作笔记并不是简单复制粘贴老师上课文案和代码,其中穿插了很多我个人的理解和感悟。希望能帮到各位小伙伴。源代码稍后会开源到Github上:链接: 源码 二、目录 JavaSE目录 01-Java入门及背景 02-变量、数据类型和运算符 03-IDEA的使用 04-程序流程控制 05-数组 Array 06-面向对象(上)

Sihang_Xie的博客 309

JAVASE学习——————Day09

Day09————嵌套循环和方法 入门 /* L * ***** 1 5 ***** 2 5 ***** 3 5 ***** 4 5 ***** 5 5 class Demo1 { public static void main(String[] arg...

m0_47074358的博客 162

JavaSE进阶学习笔记-目录汇总(待完成)

JavaSE进阶学习笔记-目录汇总 文章目录 01-object类,常用API 02-Collection,泛型 03-list,set,数据结构,Collections 04-map,斗地主案例 05-异常,线程 06-线程,同步 07-等待与唤醒案例,线程池,Lambda表达式 08-file类,递归 09-字节流,字符流 10-缓冲流,转换流,序列化流,FIles 11-网络编程 12-函数...

qq_33820545的博客 475

JavaSE学习笔记-09

Math类提供的API 5.四舍五入表示约为多少 Math.random()返回的是[0,1)之间的一个随机小数 倘若我们想要获取 [a,b] 之间一个随机整数,如何获取?公式是什么? Math.random()返回的是[0,1)之间的一个随机小数,那么 Math.random()*(b-a)返回的是[0,b-a)的一个随机数。 那么Math.random()*(b-a+1),返回的就是[0,b-a+1)的一个小数, 我们之后再加a :Math.random()*(b-...

Eriksen的博客 515

Javase 基础加强 —— 09 IO流第二弹

本系列为笔者学习Javase的课堂笔记,视频资源为B站黑马程序员出品的《黑马程序员Java+AI智能辅助编程全套视频教程,java零基础入门到大牛一套通关》,章节分布参考视频教程,为同样学习Javase系列课程的同学们提供参考。

Celeste的博客 476
上一篇: Javase学习08-二维数组
下一篇: Javase学习10-位运算符
TSCCG
博客等级 码龄8年 85粉丝 118原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TSCCG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值