Java - 内部类

news2024/9/21 20:30:21

1、本地内部类
2、实例内部类
3、静态内部类
4、匿名内部类
首先,我要在这声明一下,内部类也是类,不管它是属于何种类型。

只要是类,就会有类的特性:继承 / 被继承,实现接口,套娃【内部类再套一个内部类】 都是可行的。

一、本地内部类

定义在方法里面的内部类,只能在方法中使用。

public void func(){
        class Age{
            public int num;
            public Age(){
                System.out.println("hehe");
            }
        }
    }

这基本上很少使用。了解一下就行了

二、实例内部类

定义一个普通类,将这个类放到另一个普通类里面,在类里面的类就叫做实例内部类,比如说:
在这里插入图片描述
在外面的类就可以叫做外部类,不管是实例内部类还是外部类,都可以有自己的方法和属性。

但是在实例内部类里面不能定义静态的方法和属性,因为静态的方法和属性是属于对象的。
在这里插入图片描述
如果一定要加上static,那就要加上final,这样的话这个属性就是常量
在这里插入图片描述

如何实例化内部类
我们知道普通类是可以实例化的,那内部类呢????
在这里插入图片描述
简单来说:想要获取实例内部类的类型,是需要借助外部类的类名。你可以这么理解:在获取实例内部类的类型时,需要标明它是那个类的实例内部类。

至于后面的实例化,就如前我们前面一直在说的:将实例内部类当做是外部类的成员变量。也就是说需要借助外部类的对象来调用的。事实上确实如此

2.1、内部类的使用

在我们模拟实现顺序表、链表、二叉树等等,我们是不是要定义的 节点类。
我们一般是放在 构建 这些数据结构类的外面,其实是可以放在放在里面的。
你可以这么去理解:就是一个类 需要有 几部分组成,而这几个可以抽象成几个类。那么这几个类就可以用到 实例内部类。

class MyLinkedList{
    //在创建链表的时候,就需要创造节点,这个节点可以在MyLinkedList里面创建
    class Node{
        public int val;
        Node prev;
    }
}

2.2、内部类的字节码文件

在这里插入图片描述

2.3、在实例内部类中 包含与 外部类 属性名字相同的属性。那么如何在 实例内部类中访问?

//普通类
class OuterClass{
    public int data1 = 1;
    private int data2 = 2;

    //实例内部类
    class InterClass{
        public int data3 = 3;
        private int data4 = 4;
        public int data1 = 999;
        public static final int data5 = 5;
        public void func1(){
            System.out.println(OuterClass.this.data1);
            System.out.println("实例内部类的func():::");
        }
    }
    public void func1(){
        System.out.println("普通类的func():::");
    }
}

在这里插入图片描述

2.4、实例内部类 - 重要的几个点

1、在实例内部类当中 不能定义一个静态的成员变量 和 方法。如果非要定义,只能定义一个静态常量(就是加上final)。
2、如何实例化 实例内部类的对象 : 外部类类名.实例内部类类名 引用变量 = 外部类的对象引用.new 内部类类名();
3、实例内部类当中 如果包含了和外部类同名的成员变量。
在实例内部类的内部,访问实例内部类的成员变量时,可以不用加修饰,直接输出。
但是!在实例内部类的内部,访问外部类的成员变量时,需要加上 外部类类名.this. 同名成员变量,才能访问。

三、静态内部类

静态内部类和实例内部类差不多,只是多了一个static修饰
在这里插入图片描述
跟 实例内部一样,静态内部类可以看作 外部类的一个 静态成员变量/方法。
因此,静态内部类 和 实例内部类,又会多出一个区别。
就是 静态内部类,可以定义 静态的成员和 方法。

3.1、如何访问外部类的普通的成员变量

在这里插入图片描述

匿名内部类以前讲过了,这里就不提了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/431893.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JWT 鉴权插件上线!让你的 API 更安全!

API鉴权是保证API安全性和可用性的一项重要措施。通过API鉴权,系统可以对用户或者应用进行有效的身份认证和权限管理。 除了我们之前更新的 Basic Auth 鉴权插件,这次给大家带来 JWT 鉴权插件。 JSON Web Token是一种开放标准,可以让服务器生…

数字孪生智慧路桥怎么实现?

近年来,道路桥梁安全事故频发,直接影响到了行车人员的人身安全,并且对整个公路桥梁的稳定性产生了不良影响。因此对道路桥梁运行状态的实时监测、及时进行运行状态的预警、实现巡检运维智慧化,已成为桥梁道路管理重点关注的方面。…

PostgreSQL与MySQL优劣势比较浅谈

目录 1 简介2 postgresql比mysql强大在那些方面3 PostgreSQL 为什么在国内没有MySQL流行4 postgresql比mysql一些主要区别5 postgresql比mysql特征比较5.1 MariaDB的主要特点5.2 PostgreSQL的主要特点 6 总结 1 简介 因为公司使用PostgreSQL很长时间了,忙于功能开发…

计算机视觉-角点检测

角点检测 1.分别实现Harris角点检测与SIFT特征提取,对比两者的区别1.1代码实现1.2两者区别 2.利用SIFT算法实现两幅相近图像的特征匹配2.1代码实现 3.实现匹配地理标记图像3.1代码实现 4.实验注意事项4.1实验需要安装的库和应用4.2报错内容 5.小结 1.分别实现Harris…

cdr文件怎么转化成ai文件 CDR文件转AI文件大小会变化吗

cdr与AI软件都可以用于制作矢量图形。基于不同的打印与使用需求,可能需要将cdr文件保存为ai文件使用。那么,cdr文件怎么转化成ai文件,CDR文件转AI文件大小会变化吗?下面让我们来详细解读一下吧。 一、cdr文件怎么转化成ai文件 c…

实验7 回归问题

1. 实验目的 ①掌握一元线性回归模型的实现方法; ②掌握多元线性回归模型的实现方法; ③掌握三维数据可视化方法。 2. 实验内容 ①使用TensorFlow建立一元线性回归模型,使用商品房销售数据训练模型,并使用训练好的模型预测房价…

【C++】17.map和set的模拟实现

1.红黑树中的迭代器 operator是关键 迭代需要走中序 如何走中序? _node从左子树的最左结点开始遍历走中序 分两类情况: 如果右树不为空 那么中序的下一个就是右子树的最左结点 如果右树为空 那么表示_node所在的子树已经完成 在一个结点的祖先去找 沿着路径往上孩子是它的…

【Linux】网络基础(网络层与链路层)

网络层与链路层典型协议网络层IP 地址地址管理网络号的划分(五种)特殊的网络以及IP地址路由选择链路层MAC 地址ARP 协议MTU 最大传输单元其他典型协议:ICMP、DNS 、NAT技术ICMP协议DNS 协议NAT & NAPT 技术代理网络层 功能:负…

算法设计与分析阶段考总结

前言:基本是为了我自己看的一些我容易忘记的东西,为考试作准备把 第一章 算法中的基本概念 程序设计数据结构算法 算法特性 1.有穷性 2.确定性 3.可行性 4.输出 5.输入 算法复杂性分析 算法复杂性依赖于:问题规模N,输入I&#xff…

TCP 的可靠传输

目录 可靠传输有啥用确认应答超时重传总结 可靠传输有啥用 我们知道相比于 UDP, TCP 的传输是可靠的, 啥意思呢? 就是 UDP 发送的数据, 它自己不知道发送的数据对方是否接收到. 而 TCP 发送的数据, 它知道对方是否接收到, 也就是说对方会给个应答. 假设一个场景 : 甲要付款给…

全网最详细,Jmeter性能测试-性能基础详解,接口关联与编写Java脚本(三)

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 接口关联 接口关联…

Vector - CAPL - CAN x 总线信息获取(续1)

继续.... 目录 OverLoadFrameCount -- 过载帧数量 代码示例 OverLoadFrameRate -- 过载帧速率 代码示例 StandardFrameCount -- 标准帧数量 代码示例 StandardFrameRate -- 标准帧速率 代码示例 StandardRemoteFrameCount -- 标准远程帧数量 代码示例 StandardRemote…

Java注解编译期处理AbstractProcessor详解

文章目录概述注解处理器注解处理流程AbstractProcessorgetSupportedOptions()getSupportedAnnotationTypesgetSupportedSourceVersioninit初始化process 处理方法如何注册注解处理器如何调试编译期代码Maven相关配置(指定生效的Processor)注意事项自定义注解处理器范例范例一&a…

多线程小知识

多线程 多线程环境使用哈希表HashMapHashtableConcurrentHashMap 死锁死锁是什么两者之间的死锁多人之间的死锁 死锁产生的四个必要条件:互斥使用不可抢占请求和保持循环等待 不同的锁ReentrantLockSynchronized和ReentrantLock之间的区别:具体选择Synchronized加锁工作过程偏向…

using namespace std 是什么意思——C++命名空间

目录 namespace命名空间局部域和全局域namespace展开命名空间指定命名空间 命名空间的嵌套不同文件中的同名命名空间 using namespace std 是什么意思 我们先看一段C代码&#xff1a; #include <stdio.h> #include <stdlib.h>int rand 0;int main() {printf(&quo…

6.2 统计量与抽样分布

学习目标&#xff1a; 我的理解: 统计量是从一个样本中计算得到的数值&#xff0c;用于描述样本的某种特征或性质。统计量可以用来推断总体的特征或性质&#xff0c;因为样本是总体的一部分。 通常&#xff0c;统计量是通过对样本中的数据进行计算得到的&#xff0c;例如平均…

3年轻人20万开店日营业额79.2元,年轻人开店还能赚到钱吗?

最近&#xff0c;河南郑州的蔡先生和2个朋友合伙开一家汉堡店&#xff0c;生意很惨淡&#xff0c;日营业额79.2元。 蔡先生表示&#xff0c;他们开店失败的最大原因就是没有做好前期准备工作&#xff0c;产品没有吸引人的特色&#xff0c;导致正式营业后吸引不到客户。 蔡先生用…

Python 实现海康机器人工业相机 MV-CU060-10GM 的实时显示视频流及拍照功能

一、背景介绍 1、最近项目中需要给客户对接海康机器人工业相机 MV-CU060-10GM&#xff1b; 2、客户要求通过部署的管理平台&#xff0c;可以在页面上实现如下功能&#xff1a; 1&#xff09;相机视频流开始预览&#xff1b; 2&#xff09;相机视频流停止预览&#xff1b; 3&am…

三月份跳槽了,历经阿里测开岗4轮面试,不出意外,被刷了...

大多数情况下&#xff0c;测试员的个人技能成长速度&#xff0c;远远大于公司规模或业务的成长速度。所以&#xff0c;跳槽成为了这个行业里最常见的一个词汇。 前几天&#xff0c;我看到有朋友留言说&#xff0c;他在面试阿里的测试开发工程师的时候&#xff0c;灵魂拷问三小…

NIO非阻塞式网络通信实例

一、概述 1、NIO有三大核心部分&#xff1a;Channel(通道)&#xff0c;Buufer(缓存区)&#xff0c;Selector(选择器) Buffer缓存区 缓冲区本质上是一块可以写入数据&#xff0c;然后可以从中读取数据的内存。这块内存被包装成NIO Buffer对象&#xff0c;并提供了 一组方法&am…