Java四种内部类(看这一篇就够了)

news/2025/2/9 4:39:20/

🎉🎉🎉点进来你就是我的人了
博主主页:🙈🙈🙈戳一戳,欢迎大佬指点!

人生格言:当你的才华撑不起你的野心的时候,你就应该静下心来学习!

欢迎志同道合的朋友一起加油喔🦾🦾🦾
目标梦想:进大厂,立志成为一个牛掰的Java程序猿,虽然现在还是一个🐒嘿嘿
谢谢你这么帅气美丽还给我点赞!比个心


目录

内部类

1.成员内部类/实例内部类

二、局部内部类

三、静态内部类

 四、匿名内部类



内部类

  字面意思,在类的内部编写的类就叫内部类!即一个类的内部又完整的嵌套了另一个类结构,被嵌套的类称为内部类(inner class),嵌套其他类的类称为外部类(outer class)。

内部类是类的第五大成员→【提示:类的五大成员是哪些?[属性、方法、构造方法、代码块、内部类]】

内部类一般来说包括这四种:成员内部类、局部内部类、匿名内部类和静态内部类。

官方给的内部类优点如下:
1.每个内部类都能独立的继承一个接口的实现,所以无论外部类是否已经继承了某个(接口的)实现,对于内部类都没有影响。内部类使得多继承的解决方案变得完整;
2.方便将存在一定逻辑关系的类组织在一起,又可以对外界隐藏;
3.方便编写事件驱动程序;
4.方便编写线程代码。

注意:内部类是学习的难点,同时也是重点,后面看底层源码时,有大量的内部类。

1.成员内部类/实例内部类

直接定义在类中,未被static定义的类,就是成员内部类

1.成员内部类的特点:

🐳 成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态成员);

🐳 同名的属性名/方法名访问外部类时 → 外部类.this.成员名

🐳 成员内部类是依附外部类而存在的,也就是说,如果要创建成员内部类的对象,前提是必须存在一个外部类的对象。所以在外部类访问内部类的时候必须先实例化外部类对象

2. 成员内部类对象的创建

       🐳外部类的内部创建

              内部类名称 内部类引用 = new 内部类()

       🐳在外部类的外部创建内部类对象-内部类对外部可见(访问权限问题)

            (创建方法:外部类名称.内部类 引用 = new 外部类().new 内部类()

               成员内部类要依靠外部类才能产生所以要先创建外部对象

3. 成员方法能访问静态域  不能拥有静态域(无法定义静态变量);静态方法能访问静域  

 不能访问成员域

       🐳对于成员内部类,不呢定义一个静态属性的,因为成员内部类必须要依赖于外部类,若成员内部类有静态方属性,那么没有外部类对象也能被访问了。

       🐳对于外部类来说,不能在外部类的静态方法中使用成员内部类。比如在外部类的main方法中创建内部类对象;

代码演示:

二、局部内部类

编写在方法的内部的类称之为局部内部类,也可以称为方法内部类

局部内部类的特点

1.局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内;
2.局部内部类不可使用权限修饰符 静态(static)修饰符进行修饰 同局部变量相同;
3.局部内部类可以直接访问方法中的属性;
4.局部内部类 可以直接访问方法外部类中属性和方法;
5.局部内部类 创建对象 要在方法内部 局部内部类的外部声明。

代码演示:

三、静态内部类

直接定义在类中,被static定义的类,就是静态内部类

静态内部类特点:

1.静态内部类也是定义在另一个类里面的类,只不过在类的前面多了一个关键字static;
2.静态内部类是不需要依赖于外部类的,这点和类的静态成员属性有点类似,并且它不能使用外部类的非static成员变量或者方法;
3.静态内部类中即能声明静态成员也可以声明非静态成员。

代码演示:

 四、匿名内部类

匿名内部类只是没有类名,其他的都是具备的

匿名内部类特点:

匿名内部类不能定义任何静态成员、方法和类,只能创建匿名内部类的一个实例。一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。

🐳必须继承一个抽象类或者实现一个接口

🐳没有构造方法

总结:

(1)匿名类是一个子类,由于无名可用,所以不可能用匿名类声明对象,但却可以直接用匿名类创建一个对象。
(2)匿名类可以继承父类的方法也可以重写父类的方法。
(3)使用匿名类时,必然是在某个类中直接用匿名类创建对象,以此,匿名类一定是内部类。
(4)匿名类可以访问外嵌类中的成员变量和方法,匿名类的类体中不可以声明static成员变量和static方法。
(5)由于匿名类是一个子类,但没有类名,所以在用匿名类创建对象时,要直接使用父类的构造方法。
 


http://www.ppmy.cn/news/34433.html

相关文章

【C++学习】继承

🐱作者:一只大喵咪1201 🐱专栏:《C学习》 🔥格言:你只管努力,剩下的交给时间! C是面向对象的编程语言,它有很多的特性,但是最重要的就是封装,继承…

机器学习基础知识

1、过拟合(Overfitting)&欠拟合(Underfitting) training error:模型在训练中的误差 generalization error(泛化误差):模型对于新的数据上运行产生的误差 过拟合:记…

一篇教你学会YOLOv5,5.0或6.2版本NCNN模型部署安卓端。

这里写目录标题一、引言二、准备工作1、Android Studio2、安装vs20193、ncnn-yolov5-android源码onnx转ncnn模型三、模型部署1、修改export文件,转化onnx模型2、 下载源码一、引言 想实现下在Android上部署个深度学习模型,本文可以同时部署5.0或6.0版本…

[数据结构]直接插入排序、希尔排序

文章目录排序的概念和运用排序的概念排序运用常见的排序算法常见的排序算法直接插入排序希尔排序性能对比排序的概念和运用 排序的概念 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操…

cjson文件格式介绍

cjson是一种轻量级的JSON解析库,它支持将JSON格式的数据转换为C语言中的数据结构,同时也支持将C语言中的数据结构转换为JSON格式的数据。cjson的文件格式是指在使用cjson库时,将JSON格式的数据存储在文件中,然后通过cjson库读取文…

2万字带你精通MySQL索引

文章目录一、MySQL三层逻辑架构1、第一层负责连接管理、授权认证、安全等等。2、第二层负责解析查询3、第三层是存储引擎二、对比InnoDB与MyISAM1、存储结构2、 存储空间3、 可移植性、备份及恢复4、 事务支持5、 AUTO_INCREMENT6、 表锁差异7、 全文索引8、表主键9、表的具体行…

动态内存的开辟

🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️‍🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C 🔥座右铭:“不要等到什么都没有了,才下…

spring5(四):IOC 操作 Bean 管理(基于注解方式)

IOC操作Bean管理(基于xml方式)前言一、注解1、概述二、入门案例1、Bean 的创建2、Bean的自动装配2.1 Autowired2、Qualifie3、Resource4、Value3、扫描组件3.1 配置文件版3.2 注解版4、测试前言 本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心…