Java 内部类

个人主页:鲤鱼王打挺-CSDN博客

Java专栏:Java_鲤鱼王打挺的博客-CSDN博客

💖前言:

接口的拓展部分比较难写,小编想先理解透些再写文章,今天我们来认识一下类剩下的组成 部分:内部类!

在Java中,内部类(Inner Class)是指定义在另一个类的内部的类。内部类可以访问外部类的所有成员,包括私有成员。内部类提供了一种将类组织在一起的方式,使得代码更加模块化和封装。

内部类主要有以下几种类型:

  1. 静态内部类(Static Inner Class):

  2. 成员内部类(Member Inner Class):

  3. 匿名内部类(Anonymous Inner Class)

  4. 局部内部类(Local Inner Class):

💯一.静态内部类(Static Inner Class)

  • 定义在另一个类的内部,但被声明为静态的。
  • 不能访问外部类的非静态成员。
  • 外部类可以直接访问静态内部类的静态成员。
java 复制代码
public class OuterClass {
    public int data1 = 11;
    private int data2 = 101;
    public static int data3 = 1001;

    public void test(){
        System.out.println("外部类方法");
    }

    static class InnerClass{
        public int data4 = 10001;
        public static int data5 = 100001;
        public void fun(){
            System.out.println("内部类方法");
        }
    }
}

创建对象时可不能直接用外部类调用,否则会报错,因为该方法属于局部方法。

可以用如下图格式来创建静态内部类对象 ,(当我们提及内部类时,最好带上类型名,因为他们是有差别的!)实例化对象时没有依赖于外部类对象!

当我们在内部类成员方法中准备调用变量时,可以发现只显示了三个变量?!是编译器偷懒吗?

其实是因为静态内部类中如果要调用外部类变量,那么该变量必须是静态的,也就是在内部类中只能访问外部类的静态成员。

如果是外部类非静态方法 或 方法中的变量,那么内部类也不能直接访问。

💯二.成员内部类(Member Inner Class)

  • 定义在另一个类的内部,但不属于任何方法。
  • 可以访问外部类的所有成员,包括私有成员。
  • 外部类不能直接访问内部类的私有成员。

成员内部类也称为实例内部类,也可以看成非静态的内部类。

java 复制代码
class InnerClass{
        public int data4 = 10001;
        public static int data5 = 100001;
        public void fun(){
            System.out.println("内部类方法");
        }
    }

由于实例内部类与静态内部类不同,它是依赖外部类的,所以我们有两种方法创建对象:

⭐️1.在外部类内new一个内部类对象

⭐️2. 使用匿名对象

1.实例内部类所处的位置与外部类成员位置相同,因此也受public、private等访问限定符的约束
2.在实例内部类方法中访问同名的成员时,优先访问自己的,如果要访问外部类同名的成员,必须:外部类名称.this.同名成员来访问
3.实例内部类的 非静态方法中 包含了一个指向外部类对象的引用(?)
4.外部类中,不能直接访问实例内部类中的成员,如果要访问必须先要创建内部类的对象。

💯三.匿名内部类(Anonymous Inner Class)

  • 没有名字的内部类。

  • 通常用于继承其他类或实现接口。

  • 只能使用一次,不能被引用。

匿名内部类顾名思义,没有设置变量名,一般有下面几种形式:

⭐️1. 匿名内部类一般没有明确的类名,且通常只用于创建一个对象,因此不需要重复定义类;

⭐️2. 可以借助类变量

⭐️3. 结合接口(可以继承一个类或实现一个接口)

java 复制代码
public interface ITestAble {
    void test();
}

在定义匿名内部类的同时,也创建了其实例 。

💯四.局部内部类(Local Inner Class)

  • 定义在方法内部的类。
  • 只能访问方法的final或effectively final的局部变量。
  • 外部类不能直接访问局部内部类。

这个类小编感觉很少会使用,观察字节码文件会发现它一样也有自己的独立文件,但是它只在方法内部使用:

💗小结:

学习的过程肯定伴随着孤独,希望大家砥砺前行,不言放弃! 这次的分享先到此为止了。希望大家点赞关注支持下小编!

相关推荐
大只因bug1 分钟前
基于Springboot的在线考试与学习交流平台的设计与实现
java·spring boot·后端·学习·mysql·vue·在线考试与学习交流平台系统
四维碎片3 分钟前
【Qt】QApplication::restoreOverrideCursor():恢复鼠标光标到原始状态的用法解析
开发语言·qt·计算机外设
想进大厂的小王11 分钟前
Spring Boot⾃动配置
java·spring boot·后端
远望清一色17 分钟前
基于小波变换图像去噪MATLAB实现
开发语言·matlab
南城花随雪。18 分钟前
蚁群算法(Ant Colony Optimization)详细解读
算法
kfepiza19 分钟前
Win11GBK, idea2024.2.4, 使用Gradle8.8本地安装构建,不使用包装器, 解决utf-8乱码问题, 笔记241028
笔记·gradle·intellij-idea·idea·intellij idea
lLinkl25 分钟前
Java面试经典 150 题.P27. 移除元素(002)
算法
tangguofeng30 分钟前
合并排序算法(C语言版)
算法
魔法自动机33 分钟前
Unity3D学习FPS游戏(3)玩家第一人称视角转动和移动
unity·1024程序员节·fps
啊QQQQQ35 分钟前
linux:回车换行+进度条+git理解与使用以及如何解决免密码push问题
开发语言·javascript·ecmascript