1. 面向过程 & 面向对象
1.1 面向过程
- 定义:以过程(函数、步骤)为中心,强调按照业务逻辑的步骤一步步执行。
- 特点:
- 关注“怎么做”
- 数据与操作分离
- 结构简单,可维护性较差
1.2 面向对象
- 定义:以对象为中心,将数据和操作封装在对象中,通过对象交互完成任务。
- 特点:
- 关注“谁来做”
- 数据与操作绑定
- 易扩展和维护
1.3 区别
| 对比项 | 面向过程 | 面向对象 |
|---|---|---|
| 关注点 | 流程、步骤 | 对象、职责 |
| 数据与方法 | 分离 | 封装 |
| 可维护性 | 较差 | 较好 |
| 场景 | 简单任务 | 大型系统 |
项目经验模板:
在 XXX 项目中,早期使用面向过程编写脚本处理数据,随着业务复杂度增加,改为面向对象设计,将数据处理逻辑封装到类中,提升了代码可维护性。
2. Java 面向对象三大特征
- 封装:隐藏内部实现,暴露必要接口。
- 继承:代码复用,子类继承父类属性和方法。
- 多态:同一接口,不同实现类表现不同行为。
项目经验模板:
在支付系统中,定义
PaymentService接口,不同支付方式实现不同逻辑,通过接口调用实现动态切换,体现了多态特性。
3. 重载(Overload) & 重写(Override)
| 对比项 | 重载 | 重写 |
|---|---|---|
| 定义 | 同类中方法名相同,参数不同 | 子类重新实现父类方法 |
| 参数 | 必须不同 | 必须相同 |
| 返回值 | 可不同(需兼容) | 必须相同或是父类返回值的子类型 |
| 修饰符 | 可不同 | 访问权限不能低于父类方法 |
| 作用 | 提高方法灵活性 | 实现运行时多态 |
项目经验模板:
在订单模块中,通过方法重载实现不同参数类型的订单创建;通过方法重写实现不同订单类型的价格计算逻辑。
4. this & super
- this:指向当前对象,访问当前对象属性/方法,调用本类构造方法。
- super:指向父类对象,调用父类属性/方法,调用父类构造方法。
项目经验模板:
在继承结构中使用
super调用父类构造方法初始化公共属性,使用this调用本类其他构造方法简化初始化逻辑。
5. 接口 & 抽象类区别
| 对比项 | 接口 | 抽象类 |
|---|---|---|
| 方法 | 默认 public abstract(Java 8+ 可有默认方法) | 可有抽象方法和具体方法 |
| 属性 | 默认 public static final | 可有各种修饰符的属性 |
| 继承 | 可多实现 | 单继承 |
| 目的 | 规范 | 规范 + 代码复用 |
项目经验模板:
在项目中使用接口定义服务规范,抽象类实现部分通用逻辑,子类继承抽象类并实现接口方法。
6. 静态属性 & 静态方法继承与重写
- 静态属性:可继承,类级别共享。
- 静态方法:可继承,但不能真正重写,只能隐藏。
项目经验模板:
在工具类中使用静态方法提供通用功能,子类可定义同名静态方法覆盖父类调用,但不具备多态特性。
7. 权限修饰符特性
| 修饰符 | 同类 | 同包 | 子类 | 其他包 |
|---|---|---|---|---|
| public | ✔ | ✔ | ✔ | ✔ |
| protected | ✔ | ✔ | ✔ | ✘ |
| 默认 | ✔ | ✔ | ✘ | ✘ |
| private | ✔ | ✘ | ✘ | ✘ |
项目经验模板:
在项目中使用
private限制属性访问,protected允许子类访问,public暴露必要的 API。
8. Java 内部类
- 成员内部类:定义在类中,和成员变量同级。
- 静态内部类:用
static修饰,不依赖外部类实例。 - 局部内部类:定义在方法中。
- 匿名内部类:没有名字,常用于简化接口实现。
项目经验模板:
在事件监听中使用匿名内部类快速实现回调接口,减少样板代码。
9. 闭包 & 内部类区别
- 闭包:函数与其引用的外部变量的组合(Java 可用 Lambda 表达)。
- 内部类:类定义在另一个类或方法中,可访问外部类成员。
项目经验模板:
在数据处理模块中使用 Lambda 表达式实现闭包效果,简化代码;在 UI 事件中使用内部类访问外部类状态。
10. Java 多态实现机制
- 编译时多态:方法重载
- 运行时多态:方法重写 + 动态绑定
项目经验模板:
在策略模式中,通过接口引用调用不同实现类的方法,实现运行时多态。
11. 对象生命周期
- 创建(new)
- 使用(方法调用)
- 不再引用
- 垃圾回收(GC)
- 内存释放
项目经验模板:
在高并发场景中注意对象生命周期管理,避免内存泄漏。
12. static 关键字作用
- 修饰属性:类级别共享
- 修饰方法:类级别调用
- 修饰代码块:类加载时执行一次
- 修饰内部类:静态内部类不依赖外部类实例
13. final 关键字作用
- 修饰类:不可继承
- 修饰方法:不可重写
- 修饰变量:值不可更改(引用类型不可更改引用)
项目经验模板:
在常量类中使用
final修饰变量保证不可变性,在安全模块中使用final修饰类防止被继承修改逻辑。