个人主页:鲤鱼王打挺-CSDN博客
Java专栏:Java_鲤鱼王打挺的博客-CSDN博客
💖前言:
接口的拓展部分比较难写,小编想先理解透些再写文章,今天我们来认识一下类剩下的组成部分:内部类!
在Java中,内部类(Inner Class)是指定义在另一个类的内部的类。内部类可以访问外部类的所有成员,包括私有成员。内部类提供了一种将类组织在一起的方式,使得代码更加模块化和封装。
内部类主要有以下几种类型:
静态内部类(Static Inner Class):
成员内部类(Member Inner Class):
匿名内部类(Anonymous Inner Class)
局部内部类(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的局部变量。
- 外部类不能直接访问局部内部类。
这个类小编感觉很少会使用,观察字节码文件会发现它一样也有自己的独立文件,但是它只在方法内部使用:
💗小结:
学习的过程肯定伴随着孤独,希望大家砥砺前行,不言放弃! 这次的分享先到此为止了。希望大家点赞关注支持下小编!