🎶🎶哈喽哈喽大家好,我是向前的超~,今天给大家带来的是有关于内部类的详解🎶🎶
如果对你有帮助,不要吝啬你的三连哦!!要是能点一下关注那就再感谢不过啦,让我们一起成长一起进步👀👀👀👀
内部类定义:
当一个事物的内部,还有一个部分需要一个完整的结构进行描述,而这个内部的完整的结构又只为外部事物提供服 务,那么整个内部的完整结构最好使用内部类。在 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会报错
1.实例内部类:实例内部类当中,不能定义静态的成员变量
如果定义,那么一定是被final修饰的
public static final int data6 = 6;
当我们在内部类中定义静态的成员方法时,IDEA报错
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.外部类中的任何成员都可以被在实例内部类方法中直接访问
2.实例内部类所处的位置与外部类成员位置相同,因此也受public、private等访问限定符的约束
3.在实例内部类方法中访问同名的成员时,优先访问自己的,如果要访问外部类同名的成员,必须:外部类名称.this.同名成员 来访问
4.实例内部类对象必须在先有外部类对象前提下才能创建
5.实例内部类的非静态方法中包含了一个指向外部类对象的引用
6.外部类中,不能直接访问实例内部类中的成员,如果要访问必须先要创建外部类的对象。