类中内部类一定是静态的吗

内部类不一定是静态的

Java 内部类分 4 种:成员内部类、静态内部类、局部内部类、匿名内部类,只有加static才是静态内部类。

1. 成员内部类(非静态,最普通)

写在类里面,方法外面,没有 static

class Outer {
    // 非静态内部类
    class Inner {
    }
}
  • 依附外部类实例,必须先 new 外部类,才能 new 内部类

java

运行

Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
  • 可以访问外部类所有成员(包括外部类私有属性)
  • 不能拥有 static 变量、static 方法

2. 静态内部类(也叫嵌套类,加 static)

class Outer {
    static class StaticInner {
    }
}
  • 属于外部类本身,不需要外部类对象
Outer.StaticInner inner = new Outer.StaticInner();
  • 只能访问外部类static 静态成员,不能直接访问外部实例变量

重点区分: ✅ static class → 静态内部类 ❌ class 无 static → 普通成员内部类

3. 局部内部类(方法里面定义,非 static)

写在方法内部,不能用 static 修饰

public void test(){
    class LocalInner{
    }
}

4. 匿名内部类(非 static)

没有类名,new 接口 / 抽象类直接写,也是非静态。


快速记忆口诀

  1. 成员内部类:默认非 static,依赖外部对象
  2. static class 才是静态内部类,不依赖外部对象
  3. 局部、匿名内部类不能写 static 修饰符

高频易错点

  1. 普通成员内部类里面不能定义 static 方法,编译报错;静态内部类可以写 static。
  2. 很多人混淆:接口内部的类默认是public static,接口里写class A{}等价于public static class A{}

对比简表

表格

类型是否 static创建实例方式访问外部类
成员内部类❌非静态outer.new Inner()可访问实例 + 静态
静态内部类✅staticnew Outer.StaticInner()仅访问静态
局部内部类❌不能加 static方法内 new访问方法 final 变量 + 外部实例
匿名内部类❌不能加 staticnew 接口(){}同上
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值