面向对象设计(OOP)核心思想与 Java 实践总结
一、为什么要面向对象设计?
在实际的软件开发中,系统会不断迭代、需求持续变化;如果代码耦合度高、职责混乱,维护成本会急剧上升。
面向对象设计的目标是:降低耦合、提高复用、增强可扩展性和可维护性
二、面向对象的四大基本特性
1.封装:将对象的属性和行为封装在类中,对外只暴露必要的接口。
实现的方式:使用private修饰成员变量和通过public方法(getter/setter)访问
public class User { private String username; public String getUsername() { return username; } }防止外部随意修改内部数据、提高代码安全性和可维护性
2.继承、子类继承父类的属性和方法,实现代码复用。
public class Person { protected String name; } public class Student extends Person { private int score; }提高代码复用性、建立清晰的层次结构;但是Java 只支持单继承,过度继承会导致耦合度升高
3.多态:同一接口,不同实现;同一方法调用,表现出不同的行为。
public class Animal { public void speak() { System.out.println("animal"); } } public class Dog extends Animal { @Override public void speak() { System.out.println("dog"); } } Animal animal = new Dog(); animal.speak(); // dog面向接口编程、提高系统扩展性;多态的继承条件:继承或接口实现、方法重写、父类引用指向子类对象
3.抽象:提取事物的共同特征,忽略不重要的细节。
实现方法:抽象类abstract class、接口interface
public interface PayService { void pay(); } public class AliPayService implements PayService { public void pay() { System.out.println("支付宝支付"); } }补充说明:
面向对象 ≠ 面向类
常见误区:面向对象不是简单地“把代码写成类”
很多初学者以为:用了 class,写了 getter / setter就是面向对象
实际上:
面向对象强调的是【职责划分】和【对象之间的协作】,而不是类的数量。
组合优于继承:在实际开发中,优先使用组合,而不是继承
class Engine {} class Car { private Engine engine; // 组合 }原因:继承耦合度高、组合更灵活,便于扩展和替换
在 Java 后端开发中,面向对象设计几乎无处不在:
- Controller:负责请求分发(单一职责)
- Service:负责业务逻辑
- DAO / Mapper:负责数据访问
面向对象不是语法,而是一种解决复杂问题的设计思想。
