当前位置: 首页 > news >正文

二十、OOP之理解《匿名内部类》

面相对象的三大特征封装继承多态。紧接着就是接口抽象类的认识接下来看OOP最后一个知识点《匿名内部类》

一、匿名内部类

什么是匿名内部类?
匿名:没有名字的意思。
内部类:写在其他类内部的类。

顾名思义一句话概括为:“匿名内部类是一种在定义时未指定类名的内部类,它允许在创建对象的同时直接定义内部类,并通常用于实现接口或继承类,从而简化代码并避免为临时使用而创建单独的类。

1、概述:

使用类的子类对象 或者 接口实现类对象 的时候,匿名内部类就是一种获取子类对象或者实现类对象的方式,是一个固定的语法格式

2、匿名内部类的实现前提:

存在一个类或者接口,这个类可以是普通类,也可以是抽象类

3、匿名内部类的格式:

new 父类类名(实际参数){子类的类体;}

或者

new 父接口名(){实现类的类体;}

4、匿名内部类的本质:

由于没有对应的类型,所以叫做匿名内部类
本质是提供一个类的子类对象或者 一个接口的实现类对象 !!

5、匿名内部类的使用:

(1) 匿名内部类可以通过多态的形式接收

(2) 匿名内部类可以直接作为对象使用

(3) 如果某个方法需要接口或者抽象类类型的参数的时候,就可以将一个匿名内部类对象当做实际参数传递,来简化代码

public class Demo01 { //创建一个类下面有一个叫Person抽象类,一个接口Inter1public static void main(String[] args) {  //现在需要一个Person类的子类对象  具体这个子类是什么类型不知道 来使用这个eat方法Person p = new Person(11){//通过这个格式 可以为一个类提供一个子类对象,或者一个接口提供实现类对象String name;//在匿名内部类中,一般不会去定义一些新的属性,构造方法中使用的属性也是为了给父类属性赋值//内容一般都是父类具体的一些抽象方法的实现@Overridevoid eat() {System.out.println("~~~~~~~~~~");}//此时放的就是子类的类体};p.eat();Inter1 i = new Inter1() {//实现类的类体,或者子类的类体String name;
//            public Inter1(){} 因为是匿名内部类,没有类名public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic void test1() {}@Overridepublic void test2() {}};}
}
abstract class Person{  //定义一个抽象类的 人abstract void eat();//有吃一个的方法int age; //一个int类型的年龄public Person(int age) {  //调用这个方法会把年龄返回给这个类this.age = age;}
}
interface Inter1{  //创建一个接口 有两个测试方法,实现接口必须实现test1和test2void test1();void test2();
}

相关文章:

  • boost asio异步服务器(3)增加发送队列实现全双工通信
  • 离散数学答疑 6
  • 為什麼使用代理API?
  • 数组中的map方法
  • Qt-5.15.0 离线文档 html
  • Vue2+Vue3知识补充
  • Python爬取城市空气质量数据
  • CMake的学习之路
  • nmap工具使用
  • 如何成为嵌入式系统工程师?
  • 解决生产问题的万能接口(Java编译器API的使用)
  • OA协同办公系统 iWebPDF插件安装
  • 字符串循环遍历抵消、队列的应用-649. Dota2 参议院
  • (delphi11最新学习资料) Object Pascal 学习笔记---第14章泛型第2节(泛型类的类构造函数)
  • 「C系列」C enum(枚举)
  • php的引用
  • 【Leetcode】101. 对称二叉树
  • 《剑指offer》分解让复杂问题更简单
  • iOS小技巧之UIImagePickerController实现头像选择
  • Redash本地开发环境搭建
  • vue.js框架原理浅析
  • 如何用vue打造一个移动端音乐播放器
  • 深度学习中的信息论知识详解
  • 使用agvtool更改app version/build
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • ​​​​​​​​​​​​​​Γ函数
  • # 利刃出鞘_Tomcat 核心原理解析(七)
  • #### go map 底层结构 ####
  • #Linux(帮助手册)
  • #Lua:Lua调用C++生成的DLL库
  • #pragma once
  • #QT(一种朴素的计算器实现方法)
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (20050108)又读《平凡的世界》
  • (2024,LoRA,全量微调,低秩,强正则化,缓解遗忘,多样性)LoRA 学习更少,遗忘更少
  • (4)Elastix图像配准:3D图像
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (二) 初入MySQL 【数据库管理】
  • (七)Knockout 创建自定义绑定
  • (三分钟)速览传统边缘检测算子
  • (四十一)大数据实战——spark的yarn模式生产环境部署
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)winform之ListView
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • (转载)Linux 多线程条件变量同步
  • .gitignore文件忽略的内容不生效问题解决
  • .net下的富文本编辑器FCKeditor的配置方法
  • /3GB和/USERVA开关