【Java】内部类

认识内部类:Java中内部类分如下三种

匿名内部类

实例内部类

静态实例内部类

匿名内部类

匿名内部类顾名思义就是在创建的时候不用赋予名字。

代码演示:

//匿名内部类
interface IA{void test();
}
public class Main{public static void main(String[] args) {new IA(){@Overridepublic void test() {System.out.println("hallo World");}}.test();}
}

我们定义了一个接口 IA 接着我们在 Main 方法中实例化了该接口,但没有用引用来接收该接口,这就表示内部类,接着我们在内部类中重写了 test 方法,并且在最后调用了该方法。

运行截图:

实例内部类

我们在一个类中定义的变量和方法都叫做实例成员和实例方法,顾名思义定义在一个类中的类就被称作为实例内部类。

代码演示:

class OutClass{public int data1 = 1;private int data2 = 2;public static int data3 = 3;class InnerClass{public int data4 = 4;private int data5 = 5;public void test(){System.out.println("内部类的test方法");}}public void test(){System.out.println("外部类的test方法");}
}public class Main{public static void main(String[] args) {//获取实例内部类时,要依赖外部类OutClass outclass = new OutClass();OutClass.InnerClass innerclass = outclass.new InnerClass();OutClass.InnerClass innerclass2 = new OutClass().new InnerClass();innerclass2.test();innerclass.test();}
}

我们在 OutClass 类中定义了另外一个类 InnerClass ,在内部类中同样也可以拥有成员权限修饰符修饰的变量和方法。

既然定义了一个类,那么必然就可以实例化,这里我们实例化内部类有两种方法:

//获取实例内部类时,要依赖外部类
//第一种
OutClass outclass = new OutClass();
OutClass.InnerClass innerclass = outclass.new InnerClass();
//第二种
OutClass.InnerClass innerclass2 = new OutClass().new InnerClass();

我们在实例化内部类的时候必须要依靠外部类,也就是说我们先要实例化外部类,再实例化内部类。

上述代码的运行截图:

 

我们可以看出两种实例化都可行。

在内部类中我们能否有 static 修饰的成员?我们在编译器中试试看

我们发现报错了,为什么呢?我们知道被 static 修饰的成员就会变得不依靠实例,但是我们在实例化内部类的时候必须要依靠外部类的实例,很明显冲突了!

但是我们可以有 final 修饰的成员。

这时就不报错了!

如果在外部类和内部类中有同名的成员,那么如何在内部类中访问外部类的成员。

class OutClass{public int data1 = 1;private int data2 = 2;public static int data3 = 3;class InnerClass{public int data4 = 4;private int data5 = 5;public int data1 = 6;public void test(){System.out.println(OutClass.this.data1);}}public void test(){}
}public class Main{public static void main(String[] args) {OutClass.InnerClass innerclass2 = new OutClass().new InnerClass();innerclass2.test();}
}

运行截图:

使用 外部类类名.this.重名成员 就可以在内部类中访问外部类的重名成员。

在外部类中是不能直接访问内部类中的成员,如果要访问就必须要实例化内部类。

代码演示:

class OutClass{public int data1 = 1;private int data2 = 2;public static int data3 = 3;class InnerClass{public int data4 = 4;private int data5 = 5;public int data1 = 6;public void test(){System.out.println(OutClass.this.data1);}}public void test(){InnerClass innerclass = new InnerClass();System.out.println(innerclass.data4);}
}public class Main{public static void main(String[] args) {OutClass outclass = new OutClass();outclass.test();}
}

静态实例内部类

代码示例:

class OutClass{private int data1 = 1;public int data2 = 2;public static int data3 = 3;static class InnerClass{private int data4 = 4;public int data5 = 5;public static int data6 = 6;}
}
public class Main{public static void main(String[] args) {OutClass.InnerClass innerclass = new OutClass.InnerClass();System.out.println(innerclass.data5);}
}

运行结果:

我们在实例化静态内部类的时候就不需要依靠外部内部类的实例了,就变得方便了许多。

我们可以看到在静态内部类中定义成员变量用了 static 修饰,是的静态内部类可以用 static 修饰,因为静态内部类的实例化不依靠外部类的实例。

在静态内部类中是无法直接访问外部类的成员,并且外部类也无法直接访问静态内部类的成员,都必须借助实例化才能访问。

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

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

相关文章

做国际期货有什么心得?

做过现货,外汇,国际期货,当然,做国际期货的时间比较多,几乎占用了我的交易生涯全部。现在,来讲讲我做国际期货的真实经历,交易历程和心得体会,希望正在做国际期货,或打算…

自定义Linux ISO live 启动(PE)镜像总结

这里母盘制作使用Linux Mint 制作母盘需要安装的扩展脚本https://cloud.189.cn/t/quqQBfzEnmYf (访问码:0pyi) cn.i8520.toolbox.deb cn.i8520.conky.deb根具你的需求安装这个 这是第一个帖子,制作 filesystem.squashfs 文件…

Sapphire开发日志 (十) 关于页面

关于页面 任务介绍 关于页面用户对我组工作量的展示。 实现效果 代码解释 首先封装一个子组件用于展示用户头像和名称。 const UserGrid ({src,name,size,link, }: {src: any;name: any;size?: any;link?: any; }) > (<Box sx{{ display: "flex", flex…

边缘计算和本地计算有什么区别

边缘计算和本地计算是两种不同的计算模式&#xff0c;它们在数据处理的位置、网络依赖性、响应时间、资源利用和应用场景等方面存在显著差异。 ### 边缘计算&#xff08;Edge Computing&#xff09; 边缘计算是一种分布式计算范式&#xff0c;它将数据处理和计算任务从集中式…

每日一练:攻防世界:5-1 MulTzor

一、XorTool 基于 XOR&#xff08;异或&#xff09;运算实现。它可以帮助您快速地对文本、二进制文件进行加密解密操作。 认识XorTool工具&#xff1a; 让我们先去认识一下工具&#xff1a; xortool.py 是基于 python 的脚本&#xff0c;用于完成一些 xor 分析&#xff0c;…

【C语言】多线程

C语言之多线程创建 多线程一、线程创建和回收二、线程属性三、线程分离 最后 多线程 线程是轻量级的线程(LWP:light weight process) 线程是最小执行单位&#xff0c;进程是最小分配资源单位。一个进程可以有多个线程&#xff0c;一个进程可以理解为只有一个线程的进程。 每个线…

3D模型相关生成

3D模型相关生成 1. DreamFusion Model DreamFusion Model 是一种将文本描述转化为三维模型的技术。你可以想象它是一个“魔法翻译器”&#xff0c;你告诉它一个场景或物体的描述&#xff0c;比如“一个飞翔的龙”&#xff0c;它就能生成一个相应的 3D 模型。 原理&#xff1…

测试实习生【面试小结 6.20】

1&#xff0c;自我介绍 2&#xff0c;你为什么要考虑测试这一份工作呢&#xff1f; 首先&#xff0c;据我了解&#xff0c;在近几年&#xff0c;国内对软件测试越来越重视了&#xff0c;并且从用户角度来说&#xff0c;对于同类产品&#xff0c;可能更加注重于产品的质量和服务…

【云计算 复习】第6节 AWS亚马逊

一、基础存储架构Dynamo 1.概述 &#xff08;1&#xff09;为了保证其稳定性&#xff0c;Amazon的系统采用完全的分布式、去中心化的架构。 &#xff08;2&#xff09;Dynamo只支持简单的键值对方式的数据存储&#xff0c;不支持复杂的查询 &#xff08;3&#xff09;Dynamo中…

大语言模型系列-Transformer

Transformer 是一种由 Vaswani 等人在 2017 年提出的大型神经网络架构&#xff0c;广泛应用于自然语言处理任务。Transformer 架构的关键特点在于其基于注意力机制&#xff08;Attention Mechanism&#xff09;&#xff0c;完全摒弃了传统的循环神经网络&#xff08;RNN&#x…

腾讯 MOFA-Video: 可控制图转视频

腾讯 MOFA-Video: 可控制图转视频 MOFA-Video 它支持运动轨迹、人脸关键点并支持将其混合控制图像转换为视频。 混合控制: 结合图像、控制信号和关键点生成动画。 运动画笔: 结合图像、轨迹和画笔生成动画。 控制比例: 调整动画的控制比例&#xff0c;从纯 SVD 到完全控制。 通…

“人工智能+”带来新变化

以生成式人工智能&#xff08;AIGC&#xff09;为代表的新一代人工智能技术创新加速演进&#xff0c;相关商业化应用成果也不断涌现&#xff0c;行业应用范围不断拓展&#xff0c;深度赋能实体经济&#xff0c;为行业提质增效与实现减排提供助力。 自主航运初创公司OrcaAI于6月…

Appium+python自动化(二十一)- 让猴子按你指令大闹手机,让我们都成为耍猴高手(超详解)

宏哥微信粉丝群&#xff1a;https://bbs.csdn.net/topics/618423372 有兴趣的可以扫码加入 简介  一年一度的暑假如期而至&#xff0c;每年必不可少的&#xff0c;便是《西游记》这部经典电视连续剧的播出&#xff0c;作为一名90后&#xff0c;对于这部经典剧的情谊&#xff…

深度学习工具jupyter创建并检测pytorch环境以及安装工具包

1. 前言 确保已经安装Python和anaconda&#xff08;anaconda一般自带jupyter&#xff09;。然后创建一个jupyter环境&#xff0c;查看启动后的new有没有环境选项。 如果遇到了EnvironmentLocationNotFound:Not such a environment。说明conda环境安装位置有问题&#xff0c;往…

Raspberry Pi AI Kit——Hailo-8L安装记录(预告)

Hailo-8的测试见往期文章&#xff0c;最近树莓派发布了官方套件——Raspberry Pi AI Kit&#xff0c;其采用Hailo-8L&#xff0c;算力为13TOPS&#xff0c;是Hailo-8算力的一半&#xff0c;官网地址为 Raspberry Pi AI Kit安装 最近在进行Raspberry Pi AI Kit使用测试 !](htt…

建议收藏!100款宝藏级AIGC工具分享,70款ChatGPT插件惊艳的开发过程与宏大的商业化愿景

建议收藏&#xff01;100款宝藏级AIGC工具分享&#xff0c;70款ChatGPT插件惊艳的开发过程与宏大的商业化愿景。 不输ChatGPT&#xff1f;整理了100款AIGC神器&#xff0c;打工人速进。 说到AIGC工具&#xff0c;你还是只知道ChatGPT&#xff1f; 实际上&#xff0c;越来越多…

景联文科技实力入选「2024中国AI大模型产业图谱1.0版」!

近日&#xff0c;数据智能产业创新服务媒体数据猿联合上海大数据联盟共同发布《2024中国AI大模型产业图谱1.0版》&#xff0c;从大数据和人工智能等智能技术的核心出发&#xff0c;全面覆盖整个产业链&#xff0c;为行业提供更为精细且直观的专业导向。 景联文科技凭借高质量数…

小区业主管理系统

摘 要 随着城市化进程的加速和人口的不断增加&#xff0c;小区的数量也在不断增加。小区作为城市居民居住的主要场所&#xff0c;其管理工作也变得越来越重要。传统的小区业主管理方式存在诸多问题&#xff0c;如信息传递不畅、业务处理效率低下等。因此&#xff0c;开发一个高…

ansible copy模块参选选项

copy模块用于将文件从ansible控制节点&#xff08;管理主机&#xff09;或者远程主机复制到远程主机上。其操作类似于scp&#xff08;secure copy protocol&#xff09;。 关键参数标红。 参数&#xff1a; src:&#xff08;source&#xff1a;源&#xff09; 要复制到远程…

“明天下班以后请假了,孩子中考“

「作者简介」&#xff1a;冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础著作 《网络安全自学教程》&#xff0c;适合基础薄弱的同学系统化的学习网络安全&#xff0c;用最短的时间掌握最核心的技术。 前几天约服务器…