国庆节10月1日
--


嘿,欢迎回来!今天咱们不聊概念堆砌,直接钻进面向对象的“高光时刻”——static、单例、abstract、interface……这些词听着就让人想点右上角?别急,咱一条条拆开揉碎了聊,像一起debug那样边看边悟。你可能正被静态方法为啥不能调用非静态成员搞晕,也可能好奇“饿汉”和“懒汉”到底谁更靠谱……放心,这篇不背书,只讲人话。

1[修饰符] {2 // 逻辑语句3};
1interface 接口名 {2 // 属性 (默认 public static final)3 // 方法 (默认 public abstract)4}5class 类名 implements 接口 {6 // 必须实现接口的所有抽象方法7}核心定义
| 成员类型 | 默认修饰符 | 关键限制 | 备注 |
|---|---|---|---|
| 变量 | public static final | 必须是常量,声明即初始化 | 无法在实现类中修改 |
| 抽象方法 | public abstract | 实现类必须重写 | 核心契约 |
| 默认方法 | default(Java 8+) | 可有具体实现,可被重写 | 解决多继承冲突需显式调用Interface.super.method() |
| 静态方法 | static(Java 8+) | 不可被继承或重写 | 只能通过接口名.方法()调用 |
| 私有方法 | private(Java 9+) | 仅接口内部可见 | 用于 default/static 方法的代码复用 |
定义:没有类名的内部类,定义即实例化。 本质:同时是一个类、一个对象。 特点:
1new 类/接口 (参数列表) {2 // 类体(重写方法或实现方法)3};现代替代:若是函数式接口,优先使用 Lambda 表达式。
实例化语法:
1Outer outer = new Outer();2Outer.Inner inner = outer.new Inner(); // 必须依赖外部类实例访问同名成员:
1Outer.this.variableName; // 显式访问外部类成员1Outer.StaticInner inner = new Outer.StaticInner(); // 直接 new| 特性 | 成员内部类 | 静态内部类 | 局部内部类 | 匿名内部类 |
|---|---|---|---|---|
| static 修饰 | ❌ | ✅ | ❌ | ❌ |
| 外部类实例依赖 | 必须 | 不需要 | 视情况 (访问非静态需依赖) | 视情况 |
| 访问外部私有成员 | ✅ | 仅静态成员 | ✅ | ✅ |
| 访问局部变量 | N/A | N/A | 仅 final/effectively final | 仅 final/effectively final |
| 定义静态成员 | ❌ (除常量) | ✅ | ❌ | ❌ |
| 访问修饰符 | public/private等 | public/private等 | 无 | 无 |
| 主要用途 | 强耦合业务逻辑 | 解耦工具/单例 | 临时逻辑封装 | 一次性回调/监听 |
如果你喜欢,那么欢迎来到我的世界!
了解更多暂未播放



"所有的相遇都是久别重逢。"—— 未知


