「Java」内部类详解

🎶🎶哈喽哈喽大家好,我是向前的超~,今天给大家带来的是有关于内部类的详解🎶🎶

如果对你有帮助,不要吝啬你的三连哦!!要是能点一下关注那就再感谢不过啦,让我们一起成长一起进步👀👀👀👀 

内部类定义:

当一个事物的内部,还有一个部分需要一个完整的结构进行描述,而这个内部的完整的结构又只为外部事物提供服 务,那么整个内部的完整结构最好使用内部类。在 Java 中,可以将一个类定义在另一个类或者一个方法的内部, 前者称为内部类,后者称为外部类。内部类也是封装的一种体现。

class OuterClass {//外部类
    public int data1 = 1;
    private int data2 = 2;
    public static int data3 = 3;

    class InnerClass {//内部类
        public int data4 = 4;
        private int data5 = 5;
    }
}

内部类种类:

1.实例内部类       2.静态内部类     3.本地内部类     4.匿名内部类

实例内部类

当我们在内部类中定义静态成员变量时,IDEA会报错

24ff9104ec76440b861acd87430e4bb9.png

1.实例内部类:实例内部类当中,不能定义静态的成员变量

如果定义,那么一定是被final修饰的

public static final int data6 = 6;

当我们在内部类中定义静态的成员方法时,IDEA报错

782b8e68a50147c199ac37439804ae77.png

2. 实例内部类:实例内部类当中,不能定义静态的成员方法

3.我们要如何实例化实例内部类?

首先我们要先实例外部类对象,通过外部类对象来调用内部类

外部类类名.内部类     变量   =    外部类引用.new    内部类()

public class Test {
    OuterClass out = new OuterClass();
    OuterClass.InnerClass innerClass = out.new InnerClass();
}

4.如何访问实例内部类和外部类的同名成员变量

我们要通过外部类类名的this来访问

class OuterClass{

    public int data1 = 1;
    private int data2 = 2;
    public static int data3 = 3;

    class InnerClass{
        public int data4 = 4;
        private int data5 = 5;
        public int data1 = 9999;

        public void innerFunc(){
            System.out.println(this.data1);//引用内部类变量的语法(得到9999)
            System.out.println(OuterClass.this.data1);//引用外部类变量的语法(得到1)
        }
    }
}

public class Test {
    public static void main(String[] args) {
        OuterClass.InnerClass innerClass= new OuterClass().new InnerClass();
        innerClass.innerFunc();
    }

}

5.访问同名静态的方法

class OuterClass{
    public static int data3 = 3;

    class InnerClass{
        public static final int data3 = 1111;

        public void innerFunc(){
            System.out.println(this.data3);//得到1111
            System.out.println(OuterClass.data3);//得到3
        }
    }
}

public class Test {
    public static void main(String[] args) {
        OuterClass.InnerClass innerClass= new OuterClass().new InnerClass();
        innerClass.innerFunc();
    }

}

⚠️注意事项

  1. 1.外部类中的任何成员都可以被在实例内部类方法中直接访问

  2. 2.实例内部类所处的位置与外部类成员位置相同,因此也受public、private等访问限定符的约束

  3. 3.在实例内部类方法中访问同名的成员时,优先访问自己的,如果要访问外部类同名的成员,必须:外部类名称.this.同名成员 来访问

  4. 4.实例内部类对象必须在先有外部类对象前提下才能创建

  5. 5.实例内部类的非静态方法中包含了一个指向外部类对象的引用

  6. 6.外部类中,不能直接访问实例内部类中的成员,如果要访问必须先要创建外部类的对象。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值