java面向对象三大特征是日常编码的设计逻辑:封装通过private字段和校验型getter/setter控制数据访问;继承用extends表达is-a关系实现共性复用;多态依托向上转型和方法重写实现运行时动态绑定,提升扩展性。

Java 中面向对象三大特征——封装、继承、多态,不是抽象概念,而是日常编码中每天都在用的设计逻辑。理解它们的关键不在于背定义,而在于清楚“为什么这么设计”以及“在哪种场景下必须用”。
封装:控制访问,守住数据底线
封装的本质是“限制直接访问 + 提供可控入口”。把字段设为 private 不是为了不让别人看见,而是防止被随意改乱。比如年龄不能是 -5 或 200,分数不能超 100——这些校验逻辑只能放在 setter 里,而不是靠调用方自觉遵守。
- 属性一律 private,杜绝外部直接赋值(如
stu.age = -1) - 提供 public 的 getter/setter,且在 setter 中加入业务校验(如年龄范围、邮箱格式)
- 敏感操作(如密码设置)可进一步封装:setter 内自动加盐加密,对外完全隐藏明文处理过程
- 工具类、实体类、DTO 都适用;尤其在 Spring Boot 项目中,Controller 接收的参数对象必须封装好校验逻辑
继承:复用共性,分层表达“是什么”
继承解决的是“这类东西本质上属于那一类”的建模问题。它不是为了少写几行代码,而是为了建立清晰的语义关系和统一管理能力。比如 Dog 和 Cat 都 is-a Animal,那它们就该共享生命状态、叫声行为等基础能力。
- 用 extends 表达明确的父子关系,避免为复用而强行继承(例如“汽车”和“轮胎”不是 is-a,而是 has-a,该用组合)
- 父类聚焦通用逻辑(如
Animal.eat()),子类专注差异化(Dog.bark()、Cat.meow()) - 重写方法时用 @Override 显式声明,并通过 super 调用父类逻辑(如初始化后追加日志)
- 注意 Java 单继承限制:一个类只能有一个直接父类,但可通过接口弥补功能扩展需求
多态:同一调用,不同响应
多态让程序具备“以不变应万变”的能力。你只管调用 animal.sound(),至于实际是狗叫还是猫叫,由运行时对象类型决定。这种解耦极大提升了扩展性——新增一种动物,只要让它继承 Animal 并重写 sound(),原有调用代码完全不用动。
- 实现前提是:向上转型(
Animal a = new Dog();)+ 方法重写(@Override) - 典型应用:策略模式(支付方式:微信支付、支付宝)、模板方法(不同报表导出流程共用骨架)
- 编译看引用类型(
Animal),运行看实际类型(Dog),这是动态绑定的核心 - 慎用向下转型(
(Dog) a),必须配合 instanceof 判断,否则易抛ClassCastException
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











