【Java|基础篇】内部类

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

1.什么是内部类?

内部类就是在一个类中再定义一个类,内部类也是封装的体现.它可以被声明为 public、protected、private 或默认访问控制符。内部类可以访问外部类的所有成员变量和方法,包括私有成员。内部类可以用来实现一些特殊的功能,比如实现回调函数、事件处理等。常见的内部类包括实例内部类(成员内部类)、静态内部类、本地内部类、匿名内部类等。

2.实例内部类

实例内部类是指定义在另一个类的实例内部的类。它与静态内部类不同,静态内部类是定义在另一个类中的静态类。实例内部类可以访问外部类的实例变量和方法,也可以定义自己的成员变量和方法。

class Outer {
   	// ...
    class Inner {
       // ...
    }
    // ...
}

上述中的Inner类就是实例内部类.

实例内部类的实例化方式如下:
在使用实例内部类时,需要首先创建外部类的实例,然后通过外部类实例来访问内部类。
【Java|基础篇】内部类

实例内部类不能定义静态成员变量,如果定义,要被final修饰:
【Java|基础篇】内部类
实例内部类不能定义静态方法:
【Java|基础篇】内部类
如果实例内部类和外部类 的 成员变量名相同,那么实力内部类会先访问自己的成员变量
【Java|基础篇】内部类
实例内部类的特点:

  1. 实例内部类不能定义静态成员变量,如果定义,要被final修饰
  2. 实例内部类不能定义静态方法
  3. 如果实例内部类和外部类 的 成员变量名相同,那么实例内部类会先访问自己的成员变量

3.静态内部类

Java中的静态内部类是指在一个类的内部定义的另一个类,并且该内部类被声明为静态(static)的。静态内部类与普通内部类的区别在于,静态内部类不依赖于外部类的实例,可以直接通过外部类名访问

静态内部类的定义方式如下:

class OuterClass {
    // 外部类的成员和方法

    static class StaticInnerClass {
        // 静态内部类的成员和方法
    }
}

静态内部类的实例化方式如下:

OuterClass.StaticInnerClass innerObj = new OuterClass.StaticInnerClass();

以下是静态内部类的一些注意点:

静态内部类可以访问外部类的静态成员和方法,但不能访问外部类的非静态成员和方法
实例:
【Java|基础篇】内部类
同时,静态内部类也可以定义静态成员和方法,这些成员和方法与外部类的静态成员和方法类似,可以直接通过类名访问。
【Java|基础篇】内部类
方法也是一样的就不一一演示了.

静态内部类的使用场景包括但不限于:

  1. 将一个类封装在另一个类中,使得外部类的代码更加简洁清晰。
  2. 需要在外部类的静态方法中使用一个类,但又不想将该类声明为外部类的静态成员。
  3. 需要在同一个包中访问一个类,但不想将该类声明为公共类。

4.局部内部类

Java局部内部类是指在一个方法或代码块内部定义的内部类。与成员内部类不同,局部内部类只能在定义它的方法或代码块内部使用,无法在外部访问。

局部内部类的语法格式如下:

class OuterClass {
    // 外部类代码

    void outerMethod() {
        // 外部类方法

        class LocalInnerClass {
            // 局部内部类代码
        }

        // 使用局部内部类
        LocalInnerClass localInner = new LocalInnerClass();
    }
}

局部内部类的特点:

  1. 只能在定义它的方法或代码块内部使用,无法在外部访问
  2. 可以访问外部类的成员变量和方法,包括私有成员。
  3. 局部内部类可以访问方法中的局部变量,但是这些变量必须是final类型的。
  4. 局部内部类可以实现接口或继承抽象类。
  5. 局部内部类不能定义静态成员或方法,也不能包含静态代码块。

局部内部类使用的很少,了解即可.

5.匿名内部类

Java匿名内部类是一种特殊的内部类,它没有类名,直接在创建对象时定义并实现。通常用于创建只需要使用一次的类对象,可以简化代码,提高代码的可读性和可维护性。

匿名内部类的语法格式如下:

new 类名/接口() {
    // 匿名内部类的类体部分
};

示例:

interface myInterface {
    public void func();
}

public class Demo1 {
    public static void main(String[] args) {
         new myInterface(){
             @Override
             public void func() {
                 System.out.println("方法的重写");
             }
         }.func();

    }
}
// 输出:
// 方法的重载

看到这里是不是有点懵.别慌,来看下面这张图:
【Java|基础篇】内部类
这段代码定义了一个接口 myInterface,其中有一个抽象方法 func()。使用匿名内部类实现了 myInterface 接口,并重写了 func() 方法。最后通过创建匿名内部类的对象来调用重写后的 func() 方法

内名内部类的使用包含了继承或实现,方法重写,创建对象。整体就是一个类的子类对象或者接口的实现类对象.

使用场景: 当方法的参数是接口或者类时,以接口为例,可以传递这个接口的实现类对象,如果实现类只要使用一次,就可以用匿名内部类简化代码。

6.结语

内部类在Java中的一个重要特性,要重点掌握实例内部类,静态内部类和匿名内部类.

感谢你的观看!希望这篇文章能帮到你!
专栏: 《从零开始的Java学习之旅》在不断更新中,欢迎订阅!
“愿与君共勉,携手共进!”
【Java|基础篇】内部类文章来源地址https://www.toymoban.com/news/detail-473985.html

到了这里,关于【Java|基础篇】内部类的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • JAVA基础:Scanner类中next(), nextLine(), hasNext(), hasNextLine()

    一、next() : 只读缓冲区中空格之前的数据,并且光标指向本行。 二、nextLine() : 读取除回车以外的所有符号(整行内容),光标定位在下一行 三、hasNext() : 检查下一个标记(token),也就是以空格、制表符或换行符为分隔符的一个单词。如果输入流中还有下一个标记,则返回 t

    2024年02月03日
    浏览(58)
  • 【Java基础教程】(三十八)常用类库篇 · 第八讲:数组操作类——解析Arrays类中的全部操作方法,解锁Java数组操作技巧~

    前言:在学习本文之前,应该先学习并清楚了解Java基础部分的数组相关的概念和知识。 若还不具备学习条件,请先前往学习数组部分的基础知识: 《【Java基础教程】(八)面向对象篇 · 第二讲:Java 数组全面解析——动态与静态初始化、二维数组、方法参数传递、排序与转

    2024年02月15日
    浏览(61)
  • Java基础-内部类

    内部类指的是在一个类的内部定义的类,Java 中存在四种内部类,分别是成员内部类、局部内部类、静态内部类和匿名内部类。 成员内部类在类文件中与成员变量和成员方法并列,作为类的成员存在。 成员内部类可以访问外部类的所有成员,成员内部类不可以定义静态成员。

    2024年02月16日
    浏览(26)
  • 【Java|基础篇】内部类

    内部类就是在一个类中再定义一个类,内部类也是封装的体现.它可以被声明为 public、protected、private 或默认访问控制符 。内部类可以访问外部类的所有成员变量和方法,包括私有成员。内部类可以用来实现一些特殊的功能,比如实现回调函数、事件处理等。常见的内部类包括

    2024年02月08日
    浏览(25)
  • 【Java基础】匿名内部类

    🎊专栏【Java基础】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【The truth that you leave】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰 目录 🎁什么是匿名内部类 🎁为什么要使用匿名内部类 🎁详细解释 🏳️‍🌈不使用匿名内部类 🏳️‍🌈使

    2024年02月05日
    浏览(44)
  • Java实现钉钉企业内部应用机器和自定义机器人发送消息

     公司让写一个服务监控的功能,当监测到服务停止时,向钉钉群里推送报警信息。之前大概看到钉钉的开放平台的API文档,好像能群发消息的只有机器人。 钉钉开放平台目前提供三种机器人: 企业内部应用机器人 群模板机器人 自定义机器人 本来向用自己比较熟悉的自定义

    2024年02月12日
    浏览(58)
  • java基础知识——21.内部类

    这篇文章,我们来介绍一下java的内部类知识 目录 1.内部类介绍 1.1内部类的应用场景 1.2 小结 2.成员内部类 2.1 成员内部类的书写 2.2 创建成员内部类的对象 2.3 成员内部类获取外部类的成员变量 3.静态内部类 4.局部内部类 5.匿名内部类 6.总结 首先,我们来介绍一下,什么是内

    2023年04月08日
    浏览(31)
  • 【JavaSE】Java基础语法(二十一):内部类

    内部类概念 在一个类中定义一个类。举例:在一个类A的内部定义一个类B,类B就被称为内部类 内部类定义格式 格式举例: 内部类的访问特点 内部类可以直接访问外部类的成员,包括私有 外部类要访问内部类的成员,必须创建对象 示例代码: 成员内部类的定义位置 在类中

    2024年02月07日
    浏览(49)
  • [SpringBoot]如何在一个普通类中获取一个Bean

    最近在项目中出现了一个这种情况:我一顿操作猛如虎的写了好几个设计模式,然后在设计模式中的类中想将数据插入数据库,因此调用Mapper持久层,但是数据怎么都写不进去,在我一顿操作猛如虎的查找下,发现在普通类中用 @Autowired 注入的Bean是Null,也就是说注入失败了

    2024年01月19日
    浏览(45)
  • R语言【taxa】——从taxa 定义的类中获取组分信息

    Package  taxa  version 0.4.2         在拥有对应信息的对象中设置和获取类群所有权信息。         设置和获取分类群的作者信息。         设置和获取分类群的引用信息。         设置和获取分类群的日期信息。         设置和获取分类群的数据库信息。         设置和获

    2024年01月24日
    浏览(38)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包