Java 面向对象

26 阅读5分钟

1. 面向过程 & 面向对象

1.1 面向过程

  • 定义:以过程(函数、步骤)为中心,强调按照业务逻辑的步骤一步步执行。
  • 特点
    • 关注“怎么做”
    • 数据与操作分离
    • 结构简单,可维护性较差

1.2 面向对象

  • 定义:以对象为中心,将数据和操作封装在对象中,通过对象交互完成任务。
  • 特点
    • 关注“谁来做”
    • 数据与操作绑定
    • 易扩展和维护

1.3 区别

对比项面向过程面向对象
关注点流程、步骤对象、职责
数据与方法分离封装
可维护性较差较好
场景简单任务大型系统

项目经验模板

在 XXX 项目中,早期使用面向过程编写脚本处理数据,随着业务复杂度增加,改为面向对象设计,将数据处理逻辑封装到类中,提升了代码可维护性。


2. Java 面向对象三大特征

  1. 封装:隐藏内部实现,暴露必要接口。
  2. 继承:代码复用,子类继承父类属性和方法。
  3. 多态:同一接口,不同实现类表现不同行为。

项目经验模板

在支付系统中,定义 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. 对象生命周期

  1. 创建(new)
  2. 使用(方法调用)
  3. 不再引用
  4. 垃圾回收(GC)
  5. 内存释放

项目经验模板

在高并发场景中注意对象生命周期管理,避免内存泄漏。


12. static 关键字作用

  • 修饰属性:类级别共享
  • 修饰方法:类级别调用
  • 修饰代码块:类加载时执行一次
  • 修饰内部类:静态内部类不依赖外部类实例

13. final 关键字作用

  • 修饰类:不可继承
  • 修饰方法:不可重写
  • 修饰变量:值不可更改(引用类型不可更改引用)

项目经验模板

在常量类中使用 final 修饰变量保证不可变性,在安全模块中使用 final 修饰类防止被继承修改逻辑。