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

内部类(InnerClass) 总结

类的成员之五:内部类1. 什么是内部类?
将一个类A定义在另一个类B里面,里面的那个类A就称为`内部类(InnerClass)`,类B则称为`外部类(OuterClass)`。
内部只供外部类使用
2. 为什么需要内部类?
具体来说,当一个事物A的内部,还有一个部分需要一个完整的结构B进行描述,而这个内部的完整的结构B又只为外部事物A
提供服务,不在其他地方单独使用,那么整个内部的完整结构B最好使用内部类。总的来说,遵循`高内聚、低耦合`的面向对象开发原则。3. 内部类使用举例:
Thread类内部声明了State类,表示线程的生命周期
HashMap类中声明了Node类,表示封装的key和value4. 内部类的分类:(参考变量的分类)> 成员内部类:直接声明在外部类的里面。> 使用static修饰的:静态的成员内部类> 不使用static修饰的:非静态的成员内部类> 局部内部类:声明在方法内、构造器内、代码块内的内部类> 匿名的局部内部类> 非匿名的局部内部类5. 内部类这节要讲的知识:> 成员内部类的理解> 如何创建成员内部类的实例> 如何在成员内部类中调用外部类的结构> 局部内部类的基本使用6. 关于成员内部类的理解:> 从类的角度看:- 内部可以声明属性、方法、构造器、代码块、内部类等结构- 此内部类可以声明父类,可以实现接口- 可以使用final修饰- 可以使用abstract修饰> 从外部类的成员的角度看:- 在内部可以调用外部类的结构。比如:属性、方法等- 除了使用public、缺省权限修饰之外,还可以使用private、protected修饰- 可以使用static修饰7. 关于局部内部类的说明:代码
package chapter08_oop3_teacher.src.com.atguigu09.inner;/*** ClassName: OuterClassTest* Description:** @Author 尚硅谷-宋红康* @Create 10:31* @Version 1.0*/
public class OuterClassTest {public static void main(String[] args) {//1. 创建Person的静态的成员内部类的实例Person.Dog dog = new Person.Dog();dog.eat();//2. 创建Person的非静态的成员内部类的实例
//        Person.Bird bird = new Person.Bird(); //报错Person p1 = new Person();Person.Bird bird = p1.new Bird();//正确的bird.eat();bird.show("黄鹂");bird.show1();}}class Person{ //外部类String name = "Tom";int age = 1;//静态的成员内部类static class Dog{public void eat(){System.out.println("狗吃骨头");}}//非静态的成员内部类class Bird{String name = "啄木鸟";public void eat(){System.out.println("鸟吃虫子");}public void show(String name){System.out.println("age = " + age);//省略了Person.thisSystem.out.println("name = " + name);System.out.println("name = " + this.name);System.out.println("name = " + Person.this.name);}public void show1(){eat();this.eat();Person.this.eat();}}public void eat(){System.out.println("人吃饭");}public void method(){//局部内部类class InnerClass1{}}public Person(){//局部内部类class InnerClass1{}}{//局部内部类class InnerClass1{}}}

package chapter08_oop3_teacher.src.com.atguigu09.inner;/*** ClassName: OuterClassTest1* Description:** @Author 尚硅谷-宋红康* @Create 10:55* @Version 1.0*/
public class OuterClassTest1 {//说明:局部内部类的使用public void method1(){//局部内部类class A{//可以声明属性、方法等}}//开发中的场景public Comparable getInstance(){//提供了实现了Comparable接口的类//方式1:提供了接口的实现类的对象
//        class MyComparable implements Comparable{//            @Override
//            public int compareTo(Object o) {
//                return 0;
//            }
//        }
//
//        MyComparable m = new MyComparable();
//        return m;//方式2:提供了接口的实现类的匿名对象
//        class MyComparable implements Comparable{
//
//            @Override
//            public int compareTo(Object o) {
//                return 0;
//            }
//        }
//
//        return new MyComparable();//方式3:提供了接口的匿名实现类的对象
//        Comparable c = new Comparable(){
//            @Override
//            public int compareTo(Object o) {
//                return 0;
//            }
//        };
//        return c;//方式4:提供了接口的匿名实现类的匿名对象return new Comparable(){@Overridepublic int compareTo(Object o) {return 0;}};}}

相关文章:

  • 计算机网络-从输入网址到访问网站的全过程
  • 金融数据_PySpark-3.0.3随机森林(RandomForestClassifier)实例
  • AI大模型与网球运动结合的应用场景及案例分析
  • 精品PPT-2023年无人驾驶汽车车联网网络安全方案
  • Unity开发者3D模型基础
  • Java中的try catch finally结构
  • MongoDB聚合运算符:$maxN
  • 前视声呐目标识别定位(二)-目标识别定位模块
  • Rust egui(4) 增加自己的tab页面
  • 将打印jar包直接打包成windows的插件,然后通过调用插件的接口地址将流传到接口实现解析并无需预览直接打印PDF
  • android studio中添加module依赖
  • Spirngboot JWT快速配置和使用
  • 前端html+css+js常用总结快速入门
  • Kali Linux介绍
  • AJAX —— 学习(二)
  • 「面试题」如何实现一个圣杯布局?
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 【技术性】Search知识
  • ComponentOne 2017 V2版本正式发布
  • emacs初体验
  • GitUp, 你不可错过的秀外慧中的git工具
  • JSDuck 与 AngularJS 融合技巧
  • mongodb--安装和初步使用教程
  • Mybatis初体验
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • python 装饰器(一)
  • vue-cli3搭建项目
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 关于 Cirru Editor 存储格式
  • 讲清楚之javascript作用域
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 漂亮刷新控件-iOS
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 携程小程序初体验
  • 运行时添加log4j2的appender
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • 翻译 | The Principles of OOD 面向对象设计原则
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • #HarmonyOS:基础语法
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • (+4)2.2UML建模图
  • (09)Hive——CTE 公共表达式
  • (2020)Java后端开发----(面试题和笔试题)
  • (超详细)语音信号处理之特征提取
  • (初研) Sentence-embedding fine-tune notebook
  • (独孤九剑)--文件系统
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (十八)三元表达式和列表解析
  • (译) 函数式 JS #1:简介
  • (幽默漫画)有个程序员老公,是怎样的体验?