当前位置: 首页 > 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…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作&#xff1a;验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化&#xff1a;测试aof和aof持久化机制&#xff0c;确保数据在开启后正确恢复。 事务&#xff1a;检查事务的原子性和回滚机制。 发布订阅&#xff1a;确保消息正确传递。 2、性…...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...

【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权

摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题&#xff1a;安全。文章将详细阐述认证&#xff08;Authentication) 与授权&#xff08;Authorization的核心概念&#xff0c;对比传统 Session-Cookie 与现代 JWT&#xff08;JS…...

DAY 45 超大力王爱学Python

来自超大力王的友情提示&#xff1a;在用tensordoard的时候一定一定要用绝对位置&#xff0c;例如&#xff1a;tensorboard --logdir"D:\代码\archive (1)\runs\cifar10_mlp_experiment_2" 不然读取不了数据 知识点回顾&#xff1a; tensorboard的发展历史和原理tens…...

基于Uniapp的HarmonyOS 5.0体育应用开发攻略

一、技术架构设计 1.混合开发框架选型 &#xff08;1&#xff09;使用Uniapp 3.8版本支持ArkTS编译 &#xff08;2&#xff09;通过uni-harmony插件调用原生能力 &#xff08;3&#xff09;分层架构设计&#xff1a; graph TDA[UI层] -->|Vue语法| B(Uniapp框架)B --&g…...