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

Java,面向对象,内部类

内部类的定义:
将一个类A定义在另一个类B里面,里面的那个类A就称为内部类(InnerClass),类B则称为外部类(OuterClass)。
内部类的使用场景:
类A只在类B中使用,便可以使用内部类的方法。
内部类的分类:
①成员内部类:直接声明在外部类的里面。
>使用static修饰的:静态的成员内部类。
>不 使用static修饰的:非静态的成员内部类。
②局部内部类:声明在方法内,构造器内,代码块的内部类。
>匿名的局部内部类。
>非匿名的局部内部类。
成员内部类的理解:
>从类的角度看:
内部可以声明 属性、方法、构造器、代码块、内部类。
可以声明父类,可以实现接口。
可以使用abstract、final修饰。
>从外部类的成员的角度看:
在内部可以调用外部的结构。比如属性、方法等。
作为外部类的成员,可以用四种权限修饰符来修饰。
可以用static来修饰。
创建成员内部类的实例:
以下面的代码为例。
class Person//外部类{//静态的成员内部类static class Dog{public void eat(){System.out.println("狗吃骨头");}}//非静态的成员内部类class Bird{public void eat(){System.out.println("鸟吃虫子");}}}

1. 创建 Person 的静态的成员内部类
Person.Dog dd = new Person.Dog();//Person用来说明Dog属于哪个外部类
dd.eat();

2.创建Person的非静态的成员内部类
Person pp = new Person();
Person.Bird bb = pp.new Bird();//Person用来说明Bird属于哪个外部类,想创建内部类Bird的对象,要拿外部类的对象pp的调用创建对象。
bb.eat();

在成员内部类中调用外部类中的结构:
以下面的代码为例。
class Person//外部类
{String name;double weight = 2.0;int age = 1;//非静态的成员内部类class Bird{String name = "鸽子";double weight = 1.0;public void eat(){System.out.println("鸟吃虫子");}public void show(double weight){System.out.println("年龄是" + age);//调用的是外部类中的age,值为1。System.out.println("名字是" + name);//调用的是内部类的name,为 鸽子System.out.println("体重是" + weight);//调用的是参数的weight,为参数的值System.out.println("体重是" + this.weight);//调用的是内部类Bird中的weight,值为1.0。System.out.println("体重是" + Person.this.weight);//调用的是Person中的weight,值为2.0}public void show2(){eat();//相当于省略了this.this.eat();//调用的是内部类的eat,输出 鸟吃虫子Person.this.eat();//调用的是外部类中的eat方法,输出 人吃饭}}public void eat(){System.out.println("人吃饭");}
}

根据内部类中的show方法可知,要调用外部类的属性(或方法),要使用  外部类名.this.外部类的属性(或方法)  的格式。
局部内部类的使用:
public class OutClassTest1
{//局部内部类的使用public void method1(){//局部内部类class A{}}//使用局部内部类的场景//方式1:public Comparable getInstance()  //Comparable是一个接口,以接口名Comparable为返回类型,即要返回一个Comparable的实现类的对象{//内部类用于提供Comparable接口的实现类,用以创建接口实现类的对象class MyComparable implements Comparable{@Overridepublic int compareTo(Object o){return 0;}}//返回接口的实现类的对象MyComparable mm = new MyComparable();return mm;}//方式2:public Comparable getInstance1()  //Comparable是一个接口,以接口名Comparable为返回类型,即要返回一个Comparable的实现类的对象{//内部类用于提供Comparable接口的实现类,用以创建接口实现类的对象class MyComparable implements Comparable{@Overridepublic int compareTo(Object o){return 0;}}//返回接口的实现类的对象(匿名)return new MyComparable();}//方式3:(匿名内部类的匿名对象)public Comparable getInstance2()  //Comparable是一个接口,以接口名Comparable为返回类型,即要返回一个Comparable的实现类的对象{//返回接口的实现类(匿名)的对象(匿名)return new Comparable()  //接口名为类型名,实际上指的是一个接口的实现类(匿名)的类型{@Overridepublic int compareTo(Object o){return 0;}};}}

匿名接口的实现类使用了接口的多态性。当然,匿名继承于父类的子类,也是利用子类的多态性。
比如:要编写一个匿名内部类,它继承于Object类,并在匿名内部类中,声明一个方法test打印出“我要玩原神!!!”。
public class ObjectTest
{public static void main(String[] args){new Object(){public void test(){System.out.println("我要玩原神!!!");}}.test();}
}

匿名的对象以父类为引用类型,但是后面有写了新的方法,再根据多态性,可知创建的其实是一个匿名的Object类的子类的匿名对象,接着直接在后面加入{},编写此匿名子类的语句写入了test方法,最后直接在编写好后的匿名子类的匿名对象后面直接调用test方法。
匿名的接口的实现类的匿名对象也是一样:
public class OutClassTest2
{public static void main(String[] args){SubA ss = new SubA();ss.method();new A(){public void method(){System.out.println("匿名实现类的匿名对象实现的method方法");}}.method();}}interface A
{void method();
}class SubA implements A{@Overridepublic void method(){System.out.println("SubA中实现的method方法");}
}

相关文章:

Java,面向对象,内部类

内部类的定义: 将一个类A定义在另一个类B里面,里面的那个类A就称为内部类(InnerClass),类B则称为外部类(OuterClass)。 内部类的使用场景: 类A只在类B中使用,便可以使用内部类的方法…...

唯一ID如何生成,介绍一下目前技术领域最常使用的几种方法

纵使十面大山,又如何,无妨… 概述 唯一ID(Unique Identifier)是在计算机科学和信息技术领域中用于标识某个实体或数据的唯一标识符。生成唯一ID的方法可以根据具体需求和应用场景的不同而有所不同。以下是一些目前技术领域中常用…...

【翻译】XL-Sum: Large-Scale Multilingual Abstractive Summarization for 44 Languages

摘要 当代的关于抽象文本摘要的研究主要集中在高资源语言,比如英语,这主要是因为低/中资源语言的数据集有限。在这项工作中,我们提出了XL-Sum,这是一个包含100万篇专业注释的文章摘要对的综合多样数据集,从BBC中提取&…...

配置OpenCV

Open CV中包含很多图像处理的算法,因此学会正确使用Open CV也是人脸识别研究的一项重要工作。在 VS2017中应用Open CV,需要进行手动配置,下面给出在VS2017中配置Open CV的详细步骤。 1.下载并安装OpenCV3.4.1与VS2017的软件。 2.配置Open CV环…...

1-时间复杂度和空间复杂度

为了找到最适合当前问题而估量“算法”的评价s 时间复杂度空间复杂度执行效率:根据算法编写出的程序,执行时间越短,效率就越高占用的内存空间:不同算法编写出的程序,执行时占用的内存空间也不相同。如果实际场景中仅能…...

EtherCAT主站SOEM -- 3 -- SOEM之ethercatconfig.h/c文件解析

EtherCAT主站SOEM -- 3 -- SOEM之ethercatconfig.h/c文件解析 一 ethercatconfig.h/c文件功能预览:二 ethercatconfig.h/c 中主要函数的作用:2.1.1 ec_config_init(uint8 usetable) 和 ecx_config_init(ecx_contextt *context, uint8 usetable)&#xff…...

洗地机哪个品牌好?家用洗地机选购攻略

随着家用洗地机的普及和市场的广泛认可,进入洗地机行业的制造商也越来越多。在面对众多洗地机品牌时,消费者常常感到困惑,不知道如何选择。面对众多选择,选择有良好保障的知名洗地机品牌是明智之举。知名品牌在质量、售后服务等方…...

Java数组的定义与常用使用方法

目录 一.什么是数组 二.数组的创建及初始化 数组的创建 数组的初始化 动态初始化: 静态初始化: 【注意】 三.数组的使用 数组中元素访问 遍历数组 四.数组作为方法的参数 参数传基本数据类型 参数传数组类型(引用数据类型) 作为方法的返回…...

[计算机网络]认识“协议”

认识“协议” 文章目录 认识“协议”序列化和反序列化网络计算器引入Sock类设计协议编写服务端类启动服务端编写客户端类启动客户端程序测试 序列化和反序列化 在网络体系结构中,应用层的应用程序会产生数据,这个数据往往不是简单的一段字符串数据&…...

“Notepad++“ 官网地址

notepad官网下载地址:https://notepad-plus-plus.org/downloads/ npp.8.5.8.Installer.x64 本下载地址- https://download.csdn.net/download/namekong8/88494023 1. Fix session file data loss issue. 2. Fix Explorer context menu "Edit with Notepad…...

基于单片机的自动感应门设计

博主主页:单片机辅导设计 博主简介:专注单片机技术领域和毕业设计项目。 主要内容:毕业设计、简历模板、学习资料、技术咨询。 文章目录 主要介绍一、自动感应门设计的功能概述二、系统总体方案2.1系统的总体计划2.2元器件的介绍2.2.1单片机的…...

【密评】商用密码应用安全性评估从业人员考核题库(二十-完结)

商用密码应用安全性评估从业人员考核题库(二十-完结) 国密局给的参考题库5000道只是基础题,后续更新完5000还会继续更其他高质量题库,持续学习,共同进步。 4640 单项选择题 在测评过程中遇到的PEM编码格式&#xff0c…...

Tigger绕过激活锁/屏幕锁隐藏工具,支持登入iCloud有消息通知,支持iOS12.0-14.8.1。

绕过激活锁工具Tigger可以用来帮助因为忘记自己的ID或者密码而导致iPhone/iPad无法激活的工具来绕过自己的iPhone/iPad。工具支持Windows和Mac。 工具支持的功能: 1.Hello界面两网/三网/无基带/乱码绕过,可以完美重启,支持iCloud登录、有消…...

VueX mapState、mapGetters、mapActions和mapMutaions 的使用

一、mapState和mapGetters 如果我们想要读取VueX中的State数据的Getters数据时,需要使用$store.state.数据名 和 $store.getters.数据名。 当我们State和getters中的数据多了以后,书写会很麻烦: 如果我们想要使用方便可以配置计算属性来简化…...

GMP标准的制药级层流细胞实验室核心要点

随着生物医药技术的飞速发展,制药行业对细胞疗法和细胞药物的需求日益增长。这推动了制药级层流细胞实验室的发展,其作为生物医药研发的关键基础设施,为制药企业提供了进行细胞培养、基因编辑、疫苗研发等工作的高效平台。本文就围绕GMP标准的…...

[免费] 适用于 Windows的10 的十大数据恢复软件

Windows 10是微软开发的跨平台和设备应用程序的操作系统。它启动速度更快,具有熟悉且扩展的“开始”菜单,甚至可以在多种设备上以新的方式工作。所以,Windows 10非常流行,我们用它来保存我们的照片、音乐、文档和更多文件。但有时…...

【halcon踩坑】区域为空但个数是1

背景 我在做瑕疵检测的时候,通过计算瑕疵区域的个数(count_obj())是否为0,来判断是否有瑕疵,如果不为0,那边我就会在图片上标记这个瑕疵的位置! 但是有一次我发现明明没…...

第二十四章 BEV感知系列一(车道线感知)

前言 近期参与到了手写AI的车道线检测的学习中去,以此系列笔记记录学习与思考的全过程。车道线检测系列会持续更新,力求完整精炼,引人启示。所需前期知识,可以结合手写AI进行系统的学习。 BEV感知系列是对论文Delving into the De…...

C++入门讲解第一篇

大家好,我是Dark Fire,终于进入了C的学习,我知道面对我的将是什么,就算变成秃头佬,也要把C学好,今天是C入门第一篇,我会尽全力将知识以清晰易懂的方式表达出,希望我们一起加油&#…...

项目实战:分页功能实战

1、在index.html添加点击事件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><link rel"stylesheet" href"style/index.css"><script src"scr…...

AI人工智能大模型应用如何落地?

人工智能大模型是近年来人工智能领域的一项重要技术突破&#xff0c;其具备强大的计算能力和学习能力&#xff0c;能够处理大规模的数据和复杂的任务。 然而&#xff0c;要将人工智能大模型应用落地并实现实际价值&#xff0c;还需要克服一些挑战和问题。 首先&#xff0c;人…...

【优选算法系列】第一节.栈的简介(1047. 删除字符串中的所有相邻重复项和844. 比较含退格的字符串)

文章目录 前言一、删除字符串中的所有相邻重复项和 1.1 题目描述 1.2 题目解析 1.2.1 算法原理 1.2.2 代码编写二、比较含退格的字符串 2.1 题目描述 2.2 题目解析 2.2.1 算法原理 2.2.2 代码编写总结 前言 …...

PostgreSQL逻辑管理结构

1.数据库逻辑结构介绍 2.数据库基本操作 2.1 创建数据库 CREATE DATABASE name [ [ WITH ] [ OWNER [] user_name ] [ TEMPLATE [] template ] [ ENCODING [] encoding ] [ LC_COLLATE [] lc_collate ] [ LC_CTYPE [] lc_ctype ] [ TABLESPACE [] tablespace ] [ CONNECTION L…...

高匿IP有什么作用

在互联网的蓬勃发展中&#xff0c;IP地址作为网络通信的基础&#xff0c;一直扮演着举足轻重的角色。而在诸多IP地址中&#xff0c;高匿IP地址则是一种特殊类型&#xff0c;其作用和价值在某些特定场合下尤为突出。那么&#xff0c;高匿IP地址究竟有哪些用处呢&#xff1f; 首先…...

Ubuntu Linux 23.10安装manimgl

1. 简介&#xff1a;manimgl是使用Python语言开发数学动画的一个库。用来创建数学动画。版本有很多&#xff0c;今天介绍manimgl&#xff0c;他要依赖OpenGL库。 2. 打开Shell命令行&#xff0c;连接上互联网。先安装opengl。 Shell>>> sudo apt install l…...

modesim verilog仿真验证基本流程(新建工程方式)

文章目录 环境搭建一、在modelsim里创建一个新的工程二、新建verilog设计文件及仿真激励文件三、仿真结果本文演示如何使用modelsim新建工程进行功能仿真。 环境搭建 本文中采用的modelsim版本如下: modelsim altera 10.3d一、在modelsim里创建一个新的工程 打开modelsim软…...

SpringBoot+AOP+自定义注解,优雅实现日志记录

文章目录 前言准备阶段1、数据库日志表2、自定义注解编写3、AOP切面类编写4、业务层4.1、Service 层&#xff1a;4.2 Service 实现层&#xff1a; 5、测试 前言 首先我们看下传统记录日志的方式是什么样的&#xff1a; DeleteMapping("/deleteUserById/{userId}") …...

多式联运路径优化问题:基于拓扑排序的遗传算法染色体编码

一、什么是拓扑排序 在图论中&#xff0c;拓扑排序&#xff08;Topological Sorting&#xff09;是一个有向无环图&#xff08;DAG, Directed Acyclic Graph&#xff09;的所有顶点的线性序列。且该序列必须满足下面两个条件&#xff1a; 每个顶点出现且只出现一次。若存在一…...

Go 方法集合与选择receiver类型

Go 方法集合与选择receiver类型 文章目录 Go 方法集合与选择receiver类型一、receiver 参数类型对 Go 方法的影响二、选择 receiver 参数类型原则2.1 选择 receiver 参数类型的第一个原则2.2 选择 receiver 参数类型的第二个原则 三、方法集合&#xff08;Method Set&#xff0…...

Unity AudioClip和PCM音频数据的转化

1 PCM音频数据转化AudioClip 假设PCM音频当前是16Khz采样率&#xff0c;16bit数据 byte[] pcmBytesnew byte[10240];float[] floatClipData new float[audioBytes.Length/2];for (int i 0; i < audioBytes.Length; i2){ floatData[i / 2] (short)((audioBytes[i 1] <…...