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

【JavaSE】你真的了解内部类吗?

前言

本篇会详细讲解内部类的四种形式,让你掌握内部类~

欢迎关注个人主页:逸狼


创造不易,可以点点赞吗~

如有错误,欢迎指出~



目录

前言

 内部类介绍

实例内部类

定义

调用

静态内部类

定义

调用

匿名内部类

定义和调用1

调用方法2

局部内部类

定义和调用


 内部类介绍

在 Java 中,可以将一个类定义在另一个类或者一个方法的内部, 前者称为内部类,后者称为外部类。(B类定义在A类的内部,称B类为内部类,A类为外部类)内部类也是封装的一种体现。

内部类分为三种

实例内部类、静态内部类、匿名内部类、局部内部类

实例内部类

定义

实例内部类定义在外部类的里面,方法的外面

class OuterClass{public int data1=1;public int data2=2;public static int data3=3;class InnerClass{public int data4=4;public int data5=5;public static int data6=6;//内部类的成员方法public void test(){System.out.println("InnerClass::test()");}}public void testA(){System.out.println("OuterClass::testA()");}
}

调用

实例内部类的实例化  

外部类.内部类  内部类引用=外部类引用.new内部类对象

实例内部类可以理解为是外部类的一个成员,要通过外部类的引用来调用

    public static void main(String[] args) {OuterClass outerClass=new OuterClass();//实例化外部类OuterClass.InnerClass innerClass=outerClass.new InnerClass();//实例化内部类innerClass.test();//调用内部类中的成员方法}

 实例内部类的方法可以调用自己的成员变量及外部类的成员变量

        //内部类的成员方法public void test(){System.out.println("InnerClass::test()");System.out.println(data4);System.out.println(data5);System.out.println(data6);System.out.println("###########");System.out.println(data1);System.out.println(data2);System.out.println(data3);}

 调用test方法 结果如图

 当内部类和外部类有相同的成员变量时,首先会访问内部类中的成员

此时,若就想访问外部类的成员变量,可以使用 外部类.this.成员变量 即可访问

 

静态内部类

定义

静态内部类定义在 外部类的里面,方法的外面,并且用static修饰

生成内部类引用不需要外部类引用的调用

class OuterClass{public int data1=1;public int data2=2;public static int data3=3;//静态内部类,外部类的里面,方法的外面,并且用static修饰static class InnerClass{public int data4=4;public int data5=5;public static int data6=6;//内部类的成员方法public void test(){System.out.println("InnerClass::test()");}}public void testA(){System.out.println("OuterClass::testA()");}

调用

静态内部类的实例化  

        OuterClass.InnerClass innerClass=new OuterClass.InnerClass();innerClass.test();

 调用外部类的成员变量,通过直接在静态内部类的成员方法中 实例化一个外部类对象,通过对象直接调用外部类的成员变量

//静态内部类的成员方法public void test(){System.out.println("InnerClass::test()");OuterClass outerClass=new OuterClass();System.out.println(data4);System.out.println(data5);System.out.println(data6);System.out.println("###########");System.out.println(outerClass.data1);System.out.println(data3);}

 结果

内部类和外部类共用同一个java源文件,但是经过编译之后,内部类会形成单独的字节码文件

匿名内部类

定义和调用1

相当于一个类实现了这个接口,同时重写了test方法

//接口
interface ITestable{void test();
}public class Test4 {public static void main(String[] args) {
//匿名内部类new ITestable(){@Override//重写了接口的方法public void test() {System.out.println("test(");}}.test();//调用test方法  直接在后面.test方法}
}

调用方法2

通过引用对象it调用test方法

        ITestable it =new ITestable() {@Overridepublic void test() {System.out.println("test()");}};it.test();

 

局部内部类

定义和调用

定义在外部类的方法中的类

class OuterClass{public int  data1=1;public void testA(){//局部内部类 定义在方法里面  只能在当前方法中使用class InnerClass {public int data1=100;public static int data2=2;public void test(){System.out.println("InnerClass::test");}}
//局部内部类 只能在当前方法testA中使用InnerClass innerClass=new InnerClass();innerClass.test();}  
}

注意:

  • 局部内部类只能在所定义的方法体内部使用
  • 不能被public、static等修饰符修饰
  • 编译器也有自己独立的字节码文件,命名格式:外部类名字$数字内部类名字.class
  • 几乎不会使用

相关文章:

【JavaSE】你真的了解内部类吗?

前言 本篇会详细讲解内部类的四种形式,让你掌握内部类~ 欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 目录 前言 内部类介绍 实例内部类 定义 调用 静态内部类 定义 调用 匿名内部类 定义和调用1 调用方法2 …...

Vue3(二):报错调试,vue3响应式原理、computed和watch,ref,props,接口

一、准备工作调试 跟着张天禹老师看前几集的时候可能会遇到如下问题: 1.下载插件:Vue Language Features (Volar)或者直接下载vue-offical 2.npm run serve时运行时出现错误:Error: vitejs/plugin-vue requires vue (>3.2.13) …...

前端console用法分享

console对于前端人员来讲肯定都不陌生,相信大部分开发者都会使用console来进行调试,但它能做的绝不仅限于调试。 最常见的控制台方法 作为开发者,最常用的 console 方法如下: 控制台打印结果: 今天我分享的是一些 co…...

Matlab|电价型负荷需求响应(考虑电价变化)

程序复现来源于《计及需求响应消纳风电的电-热综合能源系统经济调度 》第四章内容。 一、原理 需求响应的基本原理是需求侧根据电力市场价格和电网要求改变其负荷需求以 获取一定的利益回报。其中 PDR 可通过直观的电价变化信号引导用户调节用电方式, 从而达到优…...

PySide QWebChannel实现Python与JS双向通信的前后端分离桌面应用

文章目录 一、前言二、实现方法1.前端部分2.后端部分3.依赖文件三、运行结果一、前言 以往开发桌面应用通常都是页面接口一起写,这样开发周期比较长,且页面样式不灵活,如果能把页面交给前端写的话,就可前后端并行开发桌面应用了,并且css语言灵活好用样式丰富。下面介绍一…...

清明三天,用Python赚了4万?

每年4月,是Python圈子里接私活的旺季,特别是在节假日这种数据暴增的时间段,爬虫采集、逆向破解类的私活订单会集中爆发,量大价高。几乎所有的圈内人都在趁着旺季接私活。 正好,我昨天就做了一单爬虫逆向私活&#xff…...

【C/C++笔试练习】read函数、虚拟存储、用户态、线程特点、缺页处理、调度算法、进程优先级、锁的使用、创建进程、不用加减乘除做加法、三角形

文章目录 C/C笔试练习选择部分(1)read函数(2)虚拟存储(3)用户态(4)线程特点(5)缺页处理(6)调度算法(7)进程优先…...

设计模式(021)行为型之访问者模式

访问者模式是一种行为型设计模式,它可以在不修改现有代码结构的情况下,为复杂的对象结构添加新的操作。该模式将数据结构和数据操作进行分离,使得数据结构可以独立于操作进行变化,同时也可以在不改变操作的前提下增加新的操作。 在…...

Linux中磁盘的分区,格式化,挂载和文件系统的修复

一.分区工具 1.分区工具介绍 fdisk 2t及以下分区 推荐 (分完区不保存不生效,有反悔的可能) gdisk 全支持 推荐 parted 全支持 不推荐 ( 即时生效,分完立即生效) 2.fdisk 分区,查看磁盘 格式:fdisk -l [磁盘设备] fdisk -l 查看…...

Android retrofit

目录 一.简介 二.基本使用 三.注解 四.转换器 五.适配器 六.文件上传与下载 一.简介 A type-safe HTTP client for Android and Java。封装了OkHttp,也是由Square公司贡献的一个处理网络请求的开源项目。 square/retrofit: A type-safe HTTP client for Andr…...

【C++风云录】五款 C++ 库的探索与应用:物联网、嵌入式与数据处理

提升你的C技能:五个关键库的使用与指南 前言 在今天的数字化世界里,C 作为一种强大且快速的编程语言,在各类复杂系统和应用的开发中扮演着重要角色。然而,单凭语言本身的能力,我们往往无法实现所有的功能需求&#x…...

Qt_30道常见面试题及答案

1. 简述 Qt 是什么? 答:Qt 是一个跨平台的应用程序开发框架,它提供了一系列的工具和库,用于开发图形用户界面(GUI)应用程序。 2. Qt 有哪些主要模块? 答:Qt 的主要模块包括 Qt Co…...

【vue】v-model 双向数据绑定

:value&#xff1a;单向数据绑定v-model&#xff1a;双向数据绑定 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">…...

C#创建磁性窗体的方法:创建特殊窗体

目录 一、磁性窗体 二、磁性窗体的实现方法 (1)无标题窗体的移动 (2)Left属性 (3)Top属性 二、设计一个磁性窗体的实例 &#xff08;1&#xff09;资源管理器Resources.Designer.cs设计 &#xff08;2&#xff09;公共类Frm_Play.cs &#xff08;3&#xff09;主窗体 …...

Gateway 基本配置指南:构建高效的网络接入网关

简介&#xff1a; Gateway 是一个常用的网络接入网关&#xff0c;它可以帮助组织实现安全、可靠和高性能的网络连接。本文将介绍 Gateway 的基本配置&#xff0c;帮助读者了解如何正确配置和部署一个高效的 Gateway 网关。 1.网络拓扑规划&#xff1a; 在配置 Gateway 前&#…...

自定义类型: 结构体 (详解)

本文索引 一. 结构体类型的声明1. 结构体的声明和初始化2. 结构体的特殊声明3. 结构体的自引用 二. 结构体内存对齐1. 对齐规则2. 为啥存在对齐?3. 修改默认对齐值 三. 结构体传参四. 结构体实现位段1. 什么是位段?2. 位段的内存分配3. 位段的应用4. 位段的注意事项 ​ 前言:…...

设计模式(23):访问者模式

定义 表示一个作用于某对象结构中的各元素的操作&#xff0c;它使我们可以在不改变元素的类的前提下定义作用与这些元素的新操作。 模式动机 对于存储在一个集合中的对象&#xff0c;他们可能具有不同的类型(即使有一个公共的接口)&#xff0c;对于该集合中的对象&#xff0…...

【C++】类和对象③(类的默认成员函数:拷贝构造函数 | 赋值运算符重载)

&#x1f525;个人主页&#xff1a;Forcible Bug Maker &#x1f525;专栏&#xff1a;C 目录 前言 拷贝构造函数 概念 拷贝构造函数的特性及用法 赋值运算符重载 运算符重载 赋值运算符重载 结语 前言 本篇主要内容&#xff1a;类的6个默认成员函数中的拷贝构造函数…...

掀起区块链开发狂潮!Scaffold-eth带你一键打造震撼DApp

文章目录 前言一、Scaffold-eth是什么&#xff1f;二、安装和配置1.准备工作2.安装3.配置开发环境 三、进阶使用1.放入自己的合约2.部署运行 总结 前言 前面的文章传送&#x1f6aa;&#xff1a;hardhat入门 与 hardhat进阶 在之前的文章中&#xff0c;我们已经探讨了使用Har…...

【Qt 学习笔记】Qt常用控件 | 按钮类控件Check Box的使用及说明

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt常用控件 | 按钮类控件Check Box的使用及说明 文章编号&#xff1a;…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...