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

4.9 内部类


文章目录

  • 1.内部类概述
  • 2.特点
  • 3.练习 : 内部类入门案例
  • 4.成员内部类
    • 4.1 练习 : 被private修饰
    • 4.2 练习 : 被static修饰
  • 5.局部内部类
  • 6.匿名内部类


1.内部类概述

如果一个类存在的意义就是为指定的另一个类,可以把这个类放入另一个类的内部。
就是把类定义在类的内部的情况就可以形成内部类的形式。
A类中又定义了B类,B类就是内部类,B类可以当做A类的一个成员看待
在这里插入图片描述

2.特点

  1. 内部类可以直接访问外部类中的成员,包括私有成员
  2. 外部类要访问内部类的成员,必须要建立内部类的对象
  3. 在成员位置的内部类是成员内部类
  4. 在局部位置的内部类是局部内部类

3.练习 : 内部类入门案例

package partFour;
/*本类用作内部类的入门案例*/
public class TestInner1 {public static void main(String[] args) {//3.1创建内部类的对象,使用内部类的资源/*外部类名.内部类名 对象名=外部类对象.内部类对象*/Outer.Inner oi = new Outer().new Inner();//3.2通过创建好的内部类对象,使用内部类的资源oi.delete();System.out.println(oi.sum);//3.3外部想要使用外部类的资源,需要用过外部类的对象new Outer().play();}
}//1.创建外部类
class Outer{//1.1创建外部类的成员变量String name;private int age;//1.2创建外部类的成员方法public void play(){System.out.println("Outer...play()");//5.外部类使用内部类资源//delete(); //不可以直接调用内部类的方法//System.out.println(sum);//不能直接查看内部类的属性/*外部类如果想要使用内部类的资源,必须先创建内部类的对象* 通过内部类对象调用内部类的功能*/Inner in = new Inner();//直接创建内部类对象,无需指定外部类,已经在外部类里了System.out.println(in.sum);//通过内部类对象查看内部类的属性in.delete();//通过内部类对象调用内部类的方法}//2.创建内部类--被看做外部内的特殊成员class Inner{//2.1 定义内部类的成员变量int sum = 10;//2.2 定义内部类的成员方法public void delete(){System.out.println("Inner...delete()");//4.测试内部类能否使用外部类的资源//play();//可以调用外部类的方法/*要注意,play与delete只能同时调用一个,不然外部类与内部类容易形成死循环*/System.out.println(name);//可以查看外部类的普通属性System.out.println(age);//可以查看外部类的私有属性}}
}

4.成员内部类

4.1 练习 : 被private修饰

package partFour;
/*本类用于测试成员内部类被private修饰*/
public class TestInner2 {public static void main(String[] args) {//4.创建内部类对象//Outer2.Inner2 oi = new Outer2().new Inner2();//oi.eat();/*如果成员内部类被private修饰,外部无法直接访问,或创建内部类的对象*///7.间接访问,虽然创建不了私有内部类的对象,但是可以创建外部类的对象new Outer2().getInner2Eat();}
}//1.创建外部类
class Outer2{//6.提供一个公共的方法,在方法内部创建内部类Inner2的对象,调用内部类的功能public void getInner2Eat(){Inner2 in = new Inner2();//可以在外部类里创建私有成员内部类的对象in.eat();//通过创建好的内部类对象调用内部类的功能}/*成员内部类的位置在类里方法外*/public Object Inner2;//2.创建成员内部类Inner2private class Inner2{//3.创建成员内部类的普通方法public void eat(){System.out.println("Inner...eat()");}}
}

总结:
成员内部类被Private修饰以后,无法被外界直接创建创建对象使用
所以可以创建外部类对象,通过外部类对象间接访问内部类的资源

4.2 练习 : 被static修饰

package partFour;
/*本类用于测试成员内部类被static修饰*/
public class TestInner3 {public static void main(String[] args) {//4.1创建内部类对象,访问内部类资源 方式一//Outer3.Inner3 oi = new Outer3().new Inner3();//oi.show();//Inner3...show()//4.2创建内部类匿名对象访问内部类资源 方式二//new Outer3().new Inner3().show();//Inner3...show()/*现象:当内部类被static修饰以后,new Outer3报错,注释掉上面的代码*///6.1由于内部类是静态的,所以可以通过外部类类名直接找到,不用创建外部类对象Outer3.Inner3 oi = new Outer3.Inner3();oi.show();//6.2静态成员内部类创建匿名对象new Outer3.Inner3().show();//8.1调用内部类的静态方法:方式一  不推荐new Outer3.Inner3().show2();//8.1调用内部类的静态方法:方式二/*没有创建任何一个对象,直接都是通过类名找到的静态资源* 像这样连着点的方式,称作:链式加载*/Outer3.Inner3.show2();}
}//1.创建外部类
class Outer3{//2.创建成员内部类//5.用static修饰成员内部类static class Inner3{//3.定义成员内部类的普通方法public void show(){System.out.println("Inner3...show()");}//7.创建一个静态成员内部类中的静态方法static public void show2(){System.out.println("Inner...show2()");}}
}

总结:
静态资源访问时不需要创建对象,可以通过类名直接访问
访问静态类中的静态资源可以通过”. . . ”链式加载的方式访问

5.局部内部类

package partFour;
/*本类用于测试局部内部类*/
public class TestInner4 {public static void main(String[] args) {//5.创建外部类的对象,调用外部类的show方法new Outer4().show();//new Outer4().new Inner4();//会报错/*如何使用局部内部类的资源呢?* 创建外部类对象调用外部方法或者直接在main()创建局部内部类对象都是不可行的* 需要在外部类中创建内部类的对象,并且调用内部类的方法,才会触发内部类的功能*/}
}//1.创建外部类
class Outer4{//2.创建外部类成员方法public void show(){System.out.println("Outer...show()");/*局部内部类的位置:在方法里*///3.创建局部内部类class Inner4{//4.创建局部内部类的资源String name;int age;public void eat(){System.out.println("Inner...eat()");}}/*如何使用局部内部类的资源*///6.在show()里面创建内部类对象,调用内部类的功能Inner4 in = new Inner4();in.eat();System.out.println(in.name);System.out.println(in.age);}
}

6.匿名内部类

package partFour;
/*本类用于测试匿名内部类* 匿名内部类没有名字,通常与匿名对象结合在一起使用*/
public class TestInner5 {public static void main(String[] args) {//传统方法:创建接口的实现类+实现类实现类实现接口中的抽象方法+创建实现类对象+通过对象调用方法//3.创建接口一对应的匿名对象与匿名内部类new Inter1(){}.save;,并调用实现了的方法savenew Inter1() {@Overridepublic void save() {System.out.println("save()...");}@Overridepublic void get() {    }}.save();//5.创建抽象类对应的匿名对象与匿名内部类new Inter2(){//抽象类不能实现抽象方法,所以只实现了未实现的方法@Overridepublic void drink() {System.out.println("一人我饮酒醉");}}.drink();//7.调用普通类的功能调用,创建匿名对象直接调用new Inter3().powerUP();new Inter3().powerUP();//new了俩次,所以是俩个匿名对象/*如果想要多次使用实现后的功能,还是要创建普通的对象* 匿名对象只能使用一次,一次只能调用一个功能* 匿名内部类其实就充当了实现类的角色,去实现未实现的抽象方法,只是没有名字而已*/Inter3 in = new Inter3();in.study();in.study();in.study();in.study();}
}//1.创建接口
interface Inter1{//2.定义接口中的抽象方法void save();void get();
}
//4.创建抽象类
abstract class Inter2{public void play(){System.out.println("Inner...play()");}abstract public void drink();
}
//6.创建普通类
class Inter3{public void study(){System.out.println("什么都阻挡不了我学习");}public void powerUP(){System.out.println("我们会越来越强的");}
}

总结:
匿名内部类属于局部内部类,而且是没有名字的局部内部类,通常和匿名对象一起使用

相关文章:

4.9 内部类

文章目录1.内部类概述2.特点3.练习 : 内部类入门案例4.成员内部类4.1 练习 : 被private修饰4.2 练习 : 被static修饰5.局部内部类6.匿名内部类1.内部类概述 如果一个类存在的意义就是为指定的另一个类,可以把这个类放入另一个类的内部。 就是把类定义在类的内部的情…...

ncnn模型精度验证

验证ncnn模型的精度 1、进行pth模型的验证 得到ncnn模型的顺序为:.pth–>.onnx–>ncnn .pth的精度验证如下: 如进行的是二分类: model init_model(model, data_cfg, devicedevice, modeeval)###.pth转.onnx模型# #---# input_names …...

IB-PYP幼儿十大素质培养目标

作为IB候选学校,一直秉承IB教育的核心目标,贯彻在幼儿的学习生活中。IB教育之所以成为当今国际教育的领跑者,最主要的原因是IB教育是切切实实的“全人”教育,“素质”教育,拥有一套完整的教学服务体系。当我们走进IB“…...

02.13:监督学习中的分类问题

今天首先学习了监督学习中的分类问题,跑了两个代码。现在学起来感觉机器学习有很多不同的定理建立了不同的分类器,也就是所谓不同的方法。具体的数学原理我不太清楚。然后不同的应用场景有一个最优的分类器。 值得一提的应该就是终于清晰的明白了精度&am…...

leetcode刷题 | 关于二叉树的题型总结3

leetcode刷题 | 关于二叉树的题型总结3 文章目录leetcode刷题 | 关于二叉树的题型总结3题目连接递增顺序搜索树二叉搜索树中的中序后继把二叉搜索树转换为累加树二叉搜索树迭代器题目连接 897. 递增顺序搜索树 - 力扣(LeetCode) 剑指 Offer II 053. 二…...

设计模式-结构型

设计模式-结构型 结构型设计模式包含:代理模式、适配器模式、桥接模式、装饰模式、外观设计模式、享元模式、组合模式 代理模式 核心是在具体的功能类与使用者之间建立一个中介类作为代理,使用者通过代理对象对真实的功能类进行访问。 在iOS开发中&am…...

【新】华为OD机试 - 预订酒店(Python)| 运气好 会考到原题

预订酒店 题目 放暑假了,小明决定到某旅游景点游玩,他在网上搜索到了各种价位的酒店(长度为 n 的数组 A),他的心理价位是 x 元,请帮他筛选出 k 个最接近 x 元的酒店(n>=k>0),并由低到高打印酒店的价格。 输入 第一行:n, k, x 第二行:A[0] A[1] A[2]...A[n-…...

【编程基础之Python】4、安装Python开发工具

【编程基础之Python】4、安装Python开发工具安装Python开发工具为什么需要开发工具Anaconda自带的开发工具PyCharm安装PyCharm运行PyCharm并创建项目总结安装Python开发工具 为什么需要开发工具 通常情况下,为了提高开发效率,需要使用相应的开发工具&a…...

5. 最长回文子串

文章目录题目描述暴力法中心扩散法参考文献题目描述 给你一个字符串 s,找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。 示例 1: 输入:s “babad” 输出:“bab” 解释&a…...

内网渗透(二十四)之Windows协议认证和密码抓取-Mimikatz读取sam和lsass获取密码

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…...

【THREE.JS】网页中的炫酷3D

web3d一、前言粒子特效二维漫画可视化后期处理二、项目使用流程2.1 项目结构2.2 基本使用2.3 项目模板2.4 技术栈三、基础动画3.1 THREE.Clock3.2 GASP四、照相机8.1 正交相机8.2 透视相机4.3 相机控制器五、画布和全屏六、几何体七、Debug UI八、纹理贴图8.1 mipmapping8.2 放…...

Go语言之 下载安装go以及vscode配置go环境

上篇请移步到Go语言之 下载安装及第一个代码_水w的博客-CSDN博客 目录 一、下载安装以及配置go环境 1 下载安装go 2 配置go环境 二、安装配置git 一、在vscode上开发golang 1 配置 2 编写代码 解决报错:go: go.mod file not found in current directory or …...

RBAC权限 API声明四种kubernetes对象

RBAC API声明了四种kubernetes对象: Role ClusterRole RoleBinding ClusterRoleBinding Role: 名称空间内创建授权角色,指定空间名字 ClusterRole: 全局角色,集群范围,对所有名称空间有效 RoleBinding: 名称…...

CDGP仿真选择题4

CDGP仿真选择题13、指标(Metrics)可以用来衡量数据管理的效果。请从下列选项中选择正确的表述: (知识点: CDGP仿真题)A.指标是衡量或评估绩效、进度、质量、效率或其他影响的标准B.这些指标用于定义每个知识领域内完成工作的可量化事实C.指标也可以测量更抽象的特性&#xff0c…...

典型相关分析与R语言实现

典型相关分析学习目标学习内容典型相关分析的原理典型相关分析的理论内容例子具体实现方法内容小结注意解决方法学习目标 我们所采用的学习内容来自B站的Lizongzhang老师的R语言的学习分享 今天学习的主要内容是关于 典型相关分析 学习内容 首先声明,典型相关分析的内容理解…...

【蓝桥集训】第一天——前缀和

作者:指针不指南吗 专栏:Acwing 蓝桥集训每日一题 🐾输出的时候,注意数据类型🐾 文章目录1.截断数组2.前缀和3.子矩阵的和4.k倍区间1.截断数组 给定一个长度为 n 的数组 a1a_1a1​,a2a_2a2​,…,ana_nan​。 现在&…...

2022-03-19青少年软件编程(C语言)等级考试试卷(六级)解析

青少年软件编程(C语言)等级考试试卷(六级) 一、编程题(共4题,共100分)T1.多项式相加 我们经常遇到两多项式相加的情况,在这里,我们就需要用程序来模拟实现把两个多项式相加到一起。首先,我们会有两个多项式,每个多项式是独立的一行,每个多项式由系数、幂数这样的多个…...

[JavaScript 刷题] 特殊数组的特征值, leetcode 1608

[JavaScript 刷题] 特殊数组的特征值, leetcode 1608 这道题在一个列表上看到的,刚开始用暴力解想过了就过了,不过后面看了一下关键字,发现解法……非常有趣。 时间复杂度可以从 O(n2)O(n^2)O(n2) 降为 O(nlog(n))O(n log(n))O(nlog(n))&am…...

各种素材网站大全【全部倾倒,福利倒计时-JS,HTML,游戏素材,UI,图片素材等

👨‍💻个人主页:元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 收录于专栏:解忧杂货铺 ⭐各种素材网站大全⭐ 文章目录⭐各种素材网站大全⭐🎶大家必逛的四大天王…...

影片自由,丝滑流畅,Docker容器基于WebDav协议通过Alist挂载(百度网盘/阿里云盘)Python3.10接入

使用过NAS(Network Attached Storage)的朋友都知道,它可以通过局域网将本地硬盘转换为局域网内的“网盘”,简单理解就是搭建自己的“私有云”,但是硬件和网络成本都太高了,有点可望而不可及的意思。Alist开源库则可以满足我们&…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...