Java-内部类
内部类就是在一个类里面再定义一个类。
当一类事物A中包含另一类事物B,而B类不能脱离A类而存在,那么在定义A类的时候就需要在它内部定义B类。
内部类可以直接访问外部类的所有成员,而外部类需要创建内部类的对象才能访问内部类的成员
内部类分为四种:
- 匿名内部类
- 成员内部类
- 静态内部类
- 局部内部类
匿名内部类
即隐藏名字的内部类,其一般是在“创建”抽象类或者接口的“对象”(有继承或实现关系 + 需要重写方法 + 需要创建对象)时出现
这里所谓的”对象“就是匿名内部类的对象
1 | // 抽象类Test1.java |
在某些情况,抽象类或接口不需要单独编写子类进行继承与实现(如需要临时编写一个实现的抽象方法与所有实现类不同的实现类),这时就可以使用匿名内部类,省去编写子类的时间
成员内部类
局部内部类就是作为成员的内部类,它编写在成员位置,与成员变量、成员方法同级,可以被public、private等标识符修饰
1 | public class test { |
在外部类中获取成员内部类对象有两种方式:
在外部类中编写返回内部类对象的成员方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18public class Outer {
class Inner {
// 成员变量与方法
}
public Inner getInner() {
return new Inner();
}
public static void main(String[] args) {
Outer o = new Outer();
Outer.Inner i = o.getInner();
// 如果内部类是私有的,那么返回值类型可能需要为Object类型
// 但代价就是不能访问或调用对象中的成员变量或方法
Object obj = o.getInner();
}
}直接创建内部类对象,格式为:
1
2
3
4
5
6
7
8
9
10public class Outer {
class Inner {
// 成员变量与方法
}
public static void main(String[] args) {
// 外部类.内部类 对象名 = 外部类对象.内部类对象
Outer.Inner oi = new Outer().new Inner();
}
}
静态内部类
使用 static 修饰符修饰成员内部类时,内部类就是静态内部类
静态内部类只能访问外部类的静态变量或方法,如果访问非静态成员则需要创建外部类对象
1 | public class Outer { |
创建静态内部类对象和调用内部类方法的格式如下(虽然很多时候静态类不需要实例化):
1 | public class t1 { |
局部内部类
定义在方法内的内部类就是局部内部类,与局部变量同级,不能使用 public 等修饰符修饰
方法外无法直接调用局部内部类,需要在方法内创建对象来使用
局部内部类可以直接访问外部类成员以及方法内的局部变量
1 | public class Outer { |
- 标题: Java-内部类
- 作者: kk3TWT
- 创建于 : 2026-04-17 16:43:45
- 更新于 : 2026-04-18 11:21:38
- 链接: https://kk-is-very-happy.online/posts/c17bd6c/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。