Java中匿名内部类

2023-11-05

含义:

由于Java中接口和抽象类都不能实例化对象,故使用接口或抽象类时,必须有一个实现类(对应接口)或继承类(对应抽象类)。而该实现类或继承类的对象被使用次数很少,不值得去专门编码时候,就可以使用匿名内部类,此时该类不必命名,并且对象只被创建一次。即匿名内部类的实质是:一个重写或实现了父类或接口的子类对象。

格式:

new 抽象类/接口(){
    匿名内部类类体部分;
}

用法:

(1)接口或抽象类的使用,省略掉特意书写一个类去实现这个接口或抽象类的方法,直接在实例化的时候就写好这个方法。

接口使用匿名内部类:

//定义Animal接口,包含抽象方法jump()
public interface Animal {
	public abstract void jump();
}



public static void main(String [] args){
		Animal a = new Animal(){
			public void jump() {
				System.out.println("测试--接口用匿名内部类");
			}
		};
	}

上述代码中,首先定义了接口Animal,在使用接口时,省略了单独书写接口的实现类,直接在实例化该实现类的时候,重写接口中的抽象方法,并且该实现类没有名称,为匿名内部类。

抽象类使用匿名内部类:

//定义Animal抽象类,包含抽象方法jump()
public abstract class Animal {
	public abstract void jump();
}

public static void main(String [] args){
		Animal a = new Animal(){
			public void jump() {
				System.out.println("测试--接口用匿名内部类");
			}
		};
	}

上述代码中,首先定义了抽象类Animal,在使用抽象类时,省略了单独书写抽象类的继承类,直接在实例化该继承类的时候,重写抽象类中的抽象方法,并且该继承类没有名称,为匿名内部类。

(2)当接口或抽象类类型的引用数据类型作为参数在方法中,可以直接使用匿名内部类的方式创建相应的对象。

//定义接口Shout,包含两个抽象方法shout1()和shout2()
interface Shout{
	void shout1();
	void shout2();
}


//测试类中定义静态方法test(),其中方法的参数类型是接口类型
public static void test(Shout a){
	a.shout1();
	a.shout2();
}


//在主函数中调用静态方法test()
public static void main(String [] args){
	test(new Shout(){
		public void shout1() {
			System.out.println("测试--shout1");
		}
		public void shout2() {
			System.out.println("测试--shout2");
		}
	});
}

上述代码中,首先定义了接口Shout,并且包含两个抽象方法。在测试类中定义一个静态方法,该静态方法的参数是接口类型的引用数据类型。在主函数中,调用该静态方法,方法的参数必须是该接口的实现类的对象,此处省略掉书写该接口的实现类,使用匿名内部类,直接new一个接口的匿名内部类对象。

总结:

匿名内部类的本质是抽象类或接口的继承类或实现类,即匿名内部类必须继承一个抽象类或实现一个接口,并且只能继承一个抽象类或实现一个抽象类。

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java中匿名内部类 的相关文章

随机推荐

  • Python机器学习从零开始(三)数据准备

    目录 1 数据预处理 1 1调整数据尺度 1 2正态化数据 1 3标准化数据 1 4二值数据 2 数据特征选定 2 1单变量特征选定 2 2递归特征消除 2 3数据降维 2 4特征重要性 总结 特征选择时困难耗时的 也需要对需求的理解和专业
  • 微信小程序 多选项目 checkbox & checkbox-group 组件

    完整微信小程序 Java后端 技术贴目录清单页面 必看 多项选择器 checkbox group 内部由多个 checkbox组成 checkbox多项选择器组件 和HTML中的多选框是一样的 用来进行多项选择 属性 类型 默认值 必填 说
  • 一次K8S实操相关的实用笔记,希望能帮助大家填点坑

    前言 前段时间做了些 K8S 理论上的储备 也在测试的 K8S 集群上做了些简单的测试 虽然感觉收获颇丰 但是纸上得来终觉浅 没有经过生产环境的捶打和磨练 还是没办法掌握这种技术的精华 学到的东西更多的也只是流于表面 无法深入其中 正巧最近
  • 自学Android开发 AES加密

    目录 一 问题 二 解决源码 一 问题 在Java 后端发来的AES加密数据时 发现Android APP不能解密 而且Android 端 加密同样的数据返回的结果居然不一致 所以我在网上查询后 发现在SecureRandom在产生安全随机
  • Android Spider Charles - 夜神模拟器证书安装App抓包

    文章目录 前言 一 软件安装 1 Openssl安装 1 1下载安装 1 2配置环境变量 1 3查看openssl版本 输入命令 openssl version 2 夜神模拟器安装 1 1 下载安装 1 2工具准备 MT管理器 3 Char
  • NLP预处理之分词工具的使用(jieba,hanlp)

    文章目录 一 jieba简介 二 jieba的使用 1 精确模式分词 2 全模式分词 3 搜索引擎模式分词 4 使用用户自定义分词 三 hanlp简介 四 hanlp的使用 1 使用hanlp进行中文分词 2 使用hanlp进行英文分词 五
  • Python3学习之数字

    Python 数字数据类型用于存储数值 数据类型是不允许改变的 这就意味着如果改变数字数据类型的值 将重新分配内存空间 以下实例在变量赋值时 Number 对象将被创建 var1 1 var2 10 可以使用del语句删除一些数字对象的引用
  • msfvenom常用参数

    Kali中的 msfvenom 取代了msfpayload和msfencode 常用于生成后门木马 msfpayload是MSF攻击荷载生成器 用于生成shellcode和可执行代码 msfencode是MSF编码器 一 msfvenom
  • 【socket】listen函数及backlog参数

    man listen显示 LISTEN 2 Linux Programmer s Manual LISTEN 2 NAME listen listen for connections on a socket SYNOPSIS include
  • 华为OD机试 - 阿里巴巴找黄金宝箱(II)(Java & JS & Python)

    题目描述 一贫如洗的樵夫阿里巴巴在去砍柴的路上 无意中发现了强盗集团的藏宝地 藏宝地有编号从0 N的箱子 每个箱子上面贴有箱子中藏有金币的数量 从金币数量中选出一个数字集合 并销毁贴有这些数字的每个箱子 如果能销毁一半及以上的箱子 则返回这
  • 第十八课,立方体贴图(加载天空盒)

    原理我在这里不再过多叙述 主要从代码的运行方向来解读立方体贴图 添加天空盒顶点 float skyboxVertices positions 1 0f 1 0f 1 0f 1 0f 1 0f 1 0f 1 0f 1 0f 1 0f 1 0f
  • mysql--部门表员工表练习题

    部门表 create table dept deptno int primary key auto increment 部门编号 dname varchar 14 部门名字 loc varchar 13 地址 insert into dep
  • java核心技术卷一学习(一)

    1 java的微型版Java Micro Edition可以适用于嵌入式编程 2 0X是十六进制 0是8进制 0B是2进制 字母大小写均可 3 java 8种基本类型4中整形 byte 1字节 short 2字节 int 4字节 long
  • 曝光:超级实习生们的训练不一般

    有同学反映在面试华为时 总共四面 到技术面的时候被毙掉了 而且短时间内不能进行二次投递 这就非常的痛苦 虽然现在网上有很多的面试资料 其中不乏一些干货精华 但是只收藏不会用或者只会背八股文 面试时会非常被动 在面试中 动手编程能力是最重要的
  • vue3加载element-plus,修改端口

    环境 最新的node js 最新的vue 安装element plus npm i element plus save legacy peer deps 加载element plus 之前的vue2的方法不适用 import Element
  • 外包三年半,人废了一半

    如果不是女朋友和我提分手 我估计现在还没醒悟 大专生 18年通过校招进入湖南某软件公司 干了3年多的CRUD 今年年初 感觉自己不能够在这样下去了 长时间呆在一个舒适的环境会让一个人堕落 而我已经在一个企业干了3年的CRUD 已经让我变得不
  • VUE+Element UI 展示json数据 [vue-json-viewer]

    1 安装组件vue json viewer npm install vue json viewer save 2 在main js中引入并使用vue json viewer import JsonViewer from vue json v
  • linux下安装git-lfs的两种方法

    一 方法一 推荐 首先安装git lfs ubuntu版 sudo apt get install git lfs centeros版 sudo yum install git lfs 然后验证安装成功 git lfs install 若显
  • 电商平台学习笔记(四)——Spring配置Mybatis简化DAO层省略Mybatis核心配置文件

    今天看到电商视频教程第三天的时候 惊奇的发现 这个电商平台一共有16张表 加上MyBatis的模板Bean 一共32个Bean 如下图 想到这里 如果有Mybatis的核心配置文件 mybatis config xml 仅对每一JavaBe
  • Java中匿名内部类

    含义 由于Java中接口和抽象类都不能实例化对象 故使用接口或抽象类时 必须有一个实现类 对应接口 或继承类 对应抽象类 而该实现类或继承类的对象被使用次数很少 不值得去专门编码时候 就可以使用匿名内部类 此时该类不必命名 并且对象只被创建