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

这篇具有很好参考价值的文章主要介绍了【javaSE】内部类(来自类和对象的补充)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  ❤️❤️前言~🥳🎉🎉🎉

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

【javaSE】内部类(来自类和对象的补充),JAVA知识点专栏,javascript,开发语言,ecmascript

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

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

【javaSE】内部类(来自类和对象的补充),JAVA知识点专栏,javascript,开发语言,ecmascript

内部类 

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

分为以下四种:

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

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

实例内部类

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

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

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

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

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

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

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

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

【javaSE】内部类(来自类和对象的补充),JAVA知识点专栏,javascript,开发语言,ecmascript

 

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

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

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

【javaSE】内部类(来自类和对象的补充),JAVA知识点专栏,javascript,开发语言,ecmascript

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

成员方法跟成员变量同理

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

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

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

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

 【javaSE】内部类(来自类和对象的补充),JAVA知识点专栏,javascript,开发语言,ecmascript 

静态内部类

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

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

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

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

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

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

如添加OutClass  outclass=new  OutClass();而后将在内部类中且原本来自外部类的实例变量和实例方法前加上outclass.   就可以了。【javaSE】内部类(来自类和对象的补充),JAVA知识点专栏,javascript,开发语言,ecmascript

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

局部内部类 

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

【javaSE】内部类(来自类和对象的补充),JAVA知识点专栏,javascript,开发语言,ecmascript

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

❤️❤️【注意事项】

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();
}

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

总结 

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

【javaSE】内部类(来自类和对象的补充),JAVA知识点专栏,javascript,开发语言,ecmascript

下面是一个推荐,有兴趣的大佬们可以来腾讯云入驻,超多福利方式也很简单,快来加入吧。

【javaSE】内部类(来自类和对象的补充),JAVA知识点专栏,javascript,开发语言,ecmascript

          我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=csh4tocaxqx1文章来源地址https://www.toymoban.com/news/detail-860163.html

到了这里,关于【javaSE】内部类(来自类和对象的补充)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【JavaSE语法】类和对象(一)

    1.1 什么是面向对象 Java是一门纯面向对象的语言(Object Oriented Program,简称 OOP ),在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要 依靠对象之间的交互完成一件事情 1.2 面向对象与面向过程 注意:面向过程和面相对象并不是一门语言,而是解决问

    2024年02月05日
    浏览(26)
  • 【JavaSE】类和对象详解(下)

    面向对象程序的三大特性:封装、继承、多态~ 书接上回 类和对象(上)~ 欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 目录 前言 封装 private public 快速生成可访问封装的方法 包 导包 通过import导包 模糊导入* 特殊举例 建包 static 静态成员变量 ​

    2024年04月09日
    浏览(32)
  • 【JavaSE】基础笔记 - 类和对象(上)

      目录 1、面向对象的初步认知 1.1、什么是面向对象 1.2、面向对象与面向过程  2. 类定义和使用 2.1、简单认识类 2.2、类的定义格式 2.3、自定义类举例说明 2.3.1、定义一个狗类  2.3.2、定义一个学生类 3、类的实例化 3.1、什么是实例化 3.2、类和对象的说明   Java是一门 纯面向

    2024年02月05日
    浏览(35)
  • 【JavaSE】基础笔记 - 类和对象(下)

      目录 1、this引用 1.1、为什么要有this引用 1.2、什么是this引用 1.3、 this引用的特性 2、 对象的构造及初始化 2.1、 如何初始化对象 2.2、构造方法 2.2.1、概念   2.2.2、特性  2.3、默认初始化  2.4、就地初始化   上篇: 【JavaSE】基础笔记 - 类和对象(上)-CSDN博客 https://blo

    2024年02月04日
    浏览(33)
  • 【C++学习】类和对象--多态【待补充】

    多态是C++面向对象三大特性之一 静态多态:         函数重载和运算符重载属于静态多态,复用函数名(函数地址早绑定,编译阶段确定函数地址) 动态多态:         派生类和虚函数实现运行时多态(函数地址晚绑定,运行阶段确定函数地址)  案例: 输出:  但

    2024年02月02日
    浏览(26)
  • [C++ ]:5.类和对象中(运算符重载补充)+ 类和对象下(初始化列表)

    我们知道进行运算符重载这个函数的参数的左右类型是非常重要的,我们尝试在类中去定义这个流插入重载! 1. 考虑到隐含的参数指针: 2.进行优化! 我们观察上面的代码发现可以实现在类中进行流插入运算符的一个重载但是我们需要考虑隐含参数的位置所以我们进行传参

    2024年02月06日
    浏览(38)
  • 【手把手带你学JavaSE】第六篇:类和对象

    对了!给大家推荐一个刷题学习、面试神器——牛客网 里面有非常多的题库,跟面试经验~非常的良心!! 什么是类? 什么是对象? 怎么去理解这两个抽象的概念呢? Java是一门纯面向对象的语言(Object Oriented Program,继承OOP),在面向对象的世界里,一切皆为对象。 面向对象

    2023年04月20日
    浏览(37)
  • JavaSE核心基础-循环-知识点

    1.循环概念 循环是在满足条件的情况下,反复的做同一件事。 Java语言中的循环语句有三种,分别是for语句、while语句和do-while语句。程序中需要循环处理时,程序员要根据实际问题,选择适当的循环语句。解决循环问题时一定要找到循环条件和循环操作。 2.for循环语句格式

    2024年02月22日
    浏览(30)
  • 前端知识点视频补充

    Vscode使用: 需要下载插件:open in browser。这个插件可以快速打开浏览器。 选择文件夹有两种方式:选择打开文件、拖拽方式(这种最方便) 快捷键:快速生成Htm结构文件:!+回车 (注意是英文符号) 代码格式化:shift+alt+f 向上移动:Alt+up 快速复制一行(复制到上行):shift

    2024年02月16日
    浏览(29)
  • Linux知识点 -- 进程概念(补充)

    在用户每次使用malloc等函数在进程的堆区申请地址时,用户只需要指定空间的大小,并且会得到一个起始地址,而不会得到结束地址; 因为 堆区的结构都是由 vm_area_struct 管理的,每次malloc都会申请一个该结构体; malloc在堆上申请空间时,只需要知道起始地址,不需要知道结

    2024年02月13日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包