Bootstrap

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)

  • 定义在另一个类的内部,但被声明为静态的。
  • 不能访问外部类的非静态成员。
  • 外部类可以直接访问静态内部类的静态成员。
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)

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

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

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. 结合接口(可以继承一个类或实现一个接口)

public interface ITestAble {
    void test();
}

 

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

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

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

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

💗小结:

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

;