【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
  • 几乎不会使用

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何有效防范互联网域名诈骗?

互联网域名诈骗已成为网络安全的一大隐患。针对这一问题,保护个人和企业的网络安全至关重要。以下是几条谨防互联网域名诈骗的建议: 1.保持警惕:时刻保持对域名诈骗的警惕,警惕不明来历的域名交易或推广。 2.核实域名信息&#xf…

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

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

大模型日报|今日必读的10篇大模型论文

大家好,今日必读的大模型论文来啦! 1.谷歌推出新型 Transformer 架构:反馈注意力就是工作记忆 虽然 Transformer 给深度学习带来了革命性的变化,但二次注意复杂性阻碍了其处理无限长输入的能力。 谷歌研究团队提出了一种新型 T…

「GO基础」目录

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

24华中杯马上就要开赛了!!!!!

需要资料整合的资料可以提前进群呢(238651270) “华中杯”大学生数学建模挑战赛章程 第一条 总则 “华中杯”大学生数学建模挑战赛(以下简称竞赛)是湖北省工业与应用数 学学会主办的面向全国大学生的群众性科技活动。“华中杯”定…

软考 - 系统架构设计师 - 嵌入式真题

问题 1: (1).HTML 静态化:可以实现对系统经常访问的页面进行静态化以提高系统访问的效率,但系统页面通常需要数据库中的用户信息和用户选择来动态显示,因此不适合采用。 HTML 静态化: 将动态生成…

浅谈Java JVM

Java虚拟机(Java Virtual Machine,简称JVM)是Java语言的核心组成部分,它是一个抽象的计算机,负责执行Java字节码指令。JVM是Java平台无关性的基石,它为Java代码提供了一个标准的运行环境,使Java…

分布式调度平台

应用场景 1.xxl-job介绍 xxl-job 是一个轻量级分布式任务调度框架,支持动态添加、修改、删除定时任务,支持海量任务分片执行,支持任务执行日志在线查看和分页查询,同时支持任务失败告警和重试机制,支持分布式部署和高…

48.HarmonyOS鸿蒙系统 App(ArkUI)常用组件的使用

48.HarmonyOS鸿蒙系统 App(ArkUI)常用组件的使用 按钮触发事件 toast信息提示 单选按钮 复选框 切换按钮,开关按钮 进度条 textbox,textinput,TextArea文本输入框 气泡提示 import prompt from ohos.prompt; import promptAction from ohos.promptAction; …

第1章:自动驾驶车辆“规划”与“控制”的通用架构

1.1 自动驾驶的分级 2014年美国汽车工程师学会 (SAE) 定义了6个无人驾驶等级,从0级(完全手动)到5级(完全自动),这些无人驾驶等级准则已经被美国交通部采纳;该标准也被称为SAE标准; …

CDC类下的画线函数

本文仅供学习交流,严禁用于商业用途,如本文涉及侵权请及时联系将于24小时内删除 目录 1.实验原理(后续再补写) 2.实验步骤 3.运行代码 4.运行结果 1.实验原理(后续再补写) MoveTo(); LineTo(); 2.实验步骤 2.1在对话框中添加如下布局控件 2.2绑定…

4.15号驱动

设备树 1. 设备树介绍 1.1 引入 在linux内核3.10版本之前,arm公司将驱动相关的硬件信息(地址、中断号、i2c从机地址)都存放在arch/arm目录 由于每一个设备都会对应一个文件,进行描述硬件的信息,这个目录下会存放大量的垃圾代码&#xff0…