内部类(来自类和对象的补充)

news2025/1/18 19:00:15

  ❤️❤️前言~🥳🎉🎉🎉

hellohello~,大家好💕💕,这里是E绵绵呀✋✋ ,如果觉得这篇文章还不错的话还请点赞❤️❤️收藏💞 💞 关注💥💥,如果发现这篇文章有问题的话,欢迎各位评论留言指正,大家一起加油!一起chin up!👍👍 

💥个人主页:E绵绵的博客
💥所属专栏:JAVASE题目练习  JAVASE知识点专栏  c语言知识点专栏   c语言题目练习

之前我们在讲类和对象时就提到过内部类,不过当时说了等讲完抽象类和接口再讲这个,现在兑现诺言的时候到了,那我们开始内部类的学习吧!

内部类 

❤️❤️内部类是指在一个类的内部定义的另一个类。内部类可以访问外部类的所有成员,包括私有成员。内部类提供了一种封装和组织代码的方式,可以将相关的类和接口放在一起,增加代码的可读性和可维护性。

分为以下四种:

实例(成员)内部类,静态内部类,局部(方法)内部类,匿名内部类。

内部类虽然在外部类里面,但是它编译时内部类会形成单独的字节码文件

实例内部类

❤️❤️实例内部类的成员变量和成员方法都不能用static修饰。

但存在一个特殊的点:实例内部类中的成员变量也可以用static修饰,只不过那必须加上final修饰使其变为常量才可以用static修饰。

 ❤️❤️我们要清楚虽然内部类在外部类里面,但实例化外部类并不会同时实例出内部类,所以当实例出外部类后,内部类需要我们主动实例化。

所以实例内部类的实例化需要先创建外部类的实例,然后再通过外部类的实例来创建实例内部类的对象。

例如,如果外部类是Outer,实例内部类是Inner,那么可以通过Outer outer = new Outer(); Outer.Inner inner = outer.new Inner(); 来实例化实例内部类.

当然还有另外一种方式也可以实例化实例内部类:Outer.Inner inner=new Outer().new lnner(); 

 ❤️❤️在实例内部类中我们可以访问外部类的所有成员,包括私有成员。具体细节如下:

1. 🎯🎯当外部类和内部类成员不同名时,我们可以在实例内部类中直接使用外部类的成员变量和成员方法,无需前面还要引用:

 

在上图中InnerClass是实例内部类,我们在该内部类中直接使用了外部类中的成员变量a,但切记注意这里的a前面不能带this,如果带了this就表示这是内部类中的a,但我们内部类中不存在同名的a,所以报错。不带this直接用a时因为内部类没a所以就表示这是外部类中的a。

成员方法跟成员变量同理。

2. 🎯🎯而当内部类和外部类存在同名的成员变量时,内部类直接使用它时会优先选择自己的成员变量。如下:

此时就因为a同名导致直接使用a时优先选择内部类中的a,所以a和this.a都表示内部类中的a,而如果我们硬要使用外部类中的a时,就可以用 外部类的类名.this.a如OutClass.this.a表示这是外部类的a(注意这是特定的语法规则,我也不知道为什么用这样的格式能表示出外部类).

成员方法跟成员变量同理

❤️❤️而在外部类中我们不能直接访问实例内部类的成员,需要通过创建实例内部类的对象再引用访问。(这个懂得都懂,就不多讲了)

❤️❤️除此之外,到了其他类中我们用内部类对象引用就只能引用其内部方法和变量(不能引用外部类的)

用外部类对象引用也只能引用其方法和变量(不能引用内部类的)

❤️❤️下面我们再看下文案,防止你们没看懂:

  

静态内部类

❤️❤️我们现在说一下静态内部类跟实例内部类不同的点吧:

🎯🎯1.静态内部类可以有静态方法和变量,也可以有实例方法和变量。 

🎯​​​​​​​🎯2.静态内部类的创建不依赖于外部类的实例对象,可以直接通过外部类名创建。

如 OutClass.InnerClass innerClass = new OutClass.InnerClass();(OutClass为外部类,InnerClass为内部类)。

所以因为静态内部类的创建不需要先创建外部类,我们往往用静态内部类比实例内部类多一点。

🎯​​​​​​​🎯3. 静态内部类可以直接访问外部类的静态成员,但不能直接访问外部类的非静态成员。如果需要访问外部类的非静态成员,可以通过在内部类中创建外部类的对象来实现。

如添加OutClass  outclass=new  OutClass();而后将在内部类中且原本来自外部类的实例变量和实例方法前加上outclass.   就可以了。

❤️❤️所以这就是静态内部类跟实例内部类的不同,其他的它们两基本都相同,所以我们了解了这些不同点就可以了。

局部内部类 

❤️❤️定义在外部类的方法体中,该种内部类只能在其定义的位置使用,一般使用的非常少,此处简单了解下语法格式。不过多了解。

所以对于局部内部类它只能在外部类的某个方法体内使用,使用性很有限。

❤️❤️【注意事项】

1. 局部内部类只能在所定义的方法体内部使用

2. 不能被public、static等修饰符修饰

3. 编译器也有自己独立的字节码文件,命名格式:外部类名字$数字内部类名字.class

4. 几乎不会使用,所以我们不必过多了解  

 匿名内部类

🎯​​​​​​​🎯匿名内部类是指在使用时才定义并同时实例化的内部类,没有显式的类名。其语法格式如下:

​
接口 类名 = new 接口() {
    // 匿名内部类的成员变量和方法
};

​

注意实施该接口的类被隐藏了,没有显示出来(以及implements也没显示出来),我们new是对隐藏的该类进行实例化。对于该种格式它是特有的,所以我们只需要记住就行。

下面直接看匿名内部类的使用:

public class Main {
    public static void main(String[] args) {
        // 创建一个接口对象,并实现其方法
        MyInterface myInterface = new MyInterface() {
            @Override
            public void doSomething() {
                System.out.println("匿名内部类实现的方法");
            }
        };
        
        // 调用接口方法
        myInterface.doSomething();
    }
}

// 定义一个接口
interface MyInterface {
    void doSomething();
}

所以这就是匿名内部类的使用,之后当学到线程时我们会经常接触这种语法的。

总结 

所以我们内部类就结束啦,内部类结束我们的类与对象才算真正的结束。之后将给大家把之前学的知识点总结起来写一个小项目。还请各位铁汁们给作者点一个小小的关注,评评论呀,感谢各位大佬~❤️❤️🥳🎉🎉🎉!

 

 

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

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

相关文章

一分钟了解MOS管基础知识

场效应管(Field-Effect Transistor,简称FET)是电子技术中广泛使用的一种半导体器件,具有高输入阻抗、噪声低和低功耗等优点。 简介 场效应管是一种电压控制器件,其工作原理是通过改变栅极(Gate)…

【Unity 实用工具篇】| Unity中 实现背景模糊效果,简单易用

前言【Unity 实用工具篇】| Unity 实现背景模糊效果,简单易用一、实现背景模糊效果1.1 介绍1.2 效果展示1.3 使用说明及下载二、插件资源简单介绍2.1 导入下载好的资源2.2 功能介绍2.2.1 捕获特效2.2.2 高级选项

在集群中使用deepspeed如果端口被占用可以使用deepspeed参数更改

在集群中使用deepspeed如果端口被占用可以使用deepspeed参数更改 这一次G老师不好使了 在集群中使用deepspeed默认的端口号29500被占用,显示更改居然不起作用 G老师给的方法也不好使 #!/bin/bash MASTER_ADDRlocalhost MASTER_PORT29501 # 选择一个未被占用的端…

Spoon Taking Problem(c++题解)

题目描述 �N 人が円卓に座っており,各人は反時計回りに順に 1, …, �1, …, N と番号付けられています.各人はそれぞれ左右どちらか一方の利き手を持っています. 円卓上には 1, …, �1, …, N と番号付け…

企微知识库优缺点解析:如何让其效益最大化

企业搭建企微知识库,作为企业内部知识的集中存储和共享平台,为企业带来了很多便利。但是,任何事物都有其两面性,企微知识库也不例外。今天我们就来详细探讨搭建企微知识库的优点和缺点,如何在使用企微知识库时使其发挥…

谷歌(Google)技术面试——在线评估问题(三)

谷歌(Google)面试过程的第一步,你可能会收到一个在线评估链接。 评估有效期为 7 天,包含两个编码问题,需要在一小时内完成。 以下是一些供你练习的在线评估问题。 在本章结尾处,还提供了有关 Google 面试不…

Python 爬虫基础——http请求和http响应

写本篇文章,我认为是能把自己所理解的内容分享出来,说不定就有和我一样有这样思维的共同者,希望本篇文章能帮助大家!✨✨ 文章目录 一、 🌈python介绍和分析二、 🌈http请求三、 🌈http响应四、…

原型模式详解

原型模式简单的理解来说,就是复制品,用一个已经做好的成品作为原型,然后通过复制它得到新的产品。就好像细胞分裂一样。用Java来说,就是用对象创建对象,而不是通过类来创建对象。 原型模式的目的是从原型实例克隆出新的实例 ,对于那些有非常复杂的初始化过程的对象或者是…

核心API-Activiti7从入门到专家(3)

背景 今天的说的api,activiti7真有,但真不是这个: 这个是为了云服务,封装的一些api,以后我们还会逐步探讨,今天我们讨论的,是其真正的api,以前是这样的: 是的&#xff0…

【数据结构】——二叉树的递归实现,看完不再害怕递归

创作不易,感谢三连加支持?! 一 递归理解 递归无非就是相信它,只有你相信它,你才能写好递归!为什么?请往下看 在进入二叉树的实现之前,我们得先理解一遍递归,可能很多…

synchronized到底锁住的是谁?

我们使用synchronized关键字是用来实现线程同步的,当多个线程同时去争抢同一个资源的时候在资源上边加一个synchronized关键字,能够使得线程排队去完成操作。 synchronized到底锁定的是什么资源? 修饰方法非静态方法 ,锁定的是方…

效果翻倍!如何巧用邮件营销提升ROI?

我们可以通过“优化邮件内容、优化发送策略、优化数据分析、提升用户体验”来提升邮件营销ROI。 邮件营销一直被认为是一种有效的数字营销策略,可以帮助企业与潜在客户和现有客户建立联系、推广产品和服务、提高品牌认知度并促进销售。但是,为了确保邮件…

【番外篇2】统计学-方差分析

方差分析 方差分析(ANOVA)是一种用于比较三个或三个以上组之间平均值是否有显著差异的统计方法。通俗地说,就是用来确定不同组之间的平均值是否有显著差异。 让我们通过一个简单的例子来解释方差分析: 假设你是一位教育工作者&a…

day04-MQ

1.初识MQ 1.1.同步和异步通讯 微服务间通讯有同步和异步两种方式: 同步通讯:就像打电话,需要实时响应。异步通讯:就像发邮件,不需要马上回复。 两种方式各有优劣,打电话可以立即得到响应,但是你…

【THM】Protocols and Servers 2(协议和服务器 2

介绍 协议和服务器房间涵盖了许多协议: 远程登录HTTP协议文件传输协议邮件传输协议POP3IMAP实现这些协议的服务器会受到不同类型的攻击。仅举几例,请考虑: 嗅探攻击(网络数据包捕获)中间人 ( MITM ) 攻击密码攻击(身份验证攻击)漏洞从安全的角度来看,我们始终需要思考…

易宝OA ExecuteSqlForDataSet SQL注入漏洞复现

0x01 产品简介 易宝OA系统是一种专门为企业和机构的日常办公工作提供服务的综合性软件平台,具有信息管理、 流程管理 、知识管理(档案和业务管理)、协同办公等多种功能。 0x02 漏洞概述 易宝OA ExecuteSqlForDataSet接口处存在SQL注入漏洞,未经身份认证的攻击者可以通过…

探秘采集脑电波!

原文来自微信公众号:工程师看海,与我联系:chunhou0820 看海原创视频教程:《运放秘籍》 大家好,我是工程师看海,原创文章欢迎点赞分享! 什么是脑电波?脑电波能来干嘛?怎么…

Stable Diffusion扩散模型【详解】小白也能看懂!!

文章目录 1、Diffusion的整体过程2、加噪过程2.1 加噪的具体细节2.2 加噪过程的公式推导 3、去噪过程3.1 图像概率分布 4、损失函数5、 伪代码过程 此文涉及公式推导,需要参考这篇文章: Stable Diffusion扩散模型推导公式的基础知识 1、Diffusion的整体…

【C语言】【Leetcode】【递归】22. 括号生成

文章目录 题目思路代码实现 题目 链接: https://leetcode.cn/problems/generate-parentheses/description/ 思路 我们可以通过回溯递归算法求解 如果左括号数量不大于n,我们可以放一个左括号。 如果右括号数量小于左括号的数量,我们可以放一个右括号…

sky06笔记下

1.边沿检测 检测输入信号din的上升沿&#xff0c;并输出pulse module edge_check ( clk, rstn, din, pulse ); input wire clk,rstn; input wire din; output reg pulse;wire din_dly;always (posedge clk or negedge rstn)beginif(!rstn)din_dly < 1b0;elsedin_dly < d…