面对对象的程序与设计(基础入门)
面向对象不是先背语法,而是学会把“问题”拆成“对象”、把“变化”藏在稳定接口后面。
总览
面向对象程序设计(OOP)围绕三个问题展开:
学习路径
- 基础语法:Java入门、基本数据类型与数组底层、运算符、表达式与语句
- 对象建模:类与对象、封装、访问控制修饰符
- 类成员规则:static关键字、final关键字、Object类
- 继承体系:子类与继承、抽象类、多态
- 行为规范:接口与实现、接口回调与上转型运用
- 补充机制:内部类与异常类、匿名类
- 常用工具:常用实用类、String类、Scanner类
核心概念关系
flowchart LR A["类与对象"] --> B["封装"] B --> C["访问控制修饰符"] A --> D["子类与继承"] D --> E["抽象类"] D --> F["多态"] E --> F G["接口与实现"] --> F A --> H["Object类"] A --> I["static关键字"] D --> J["final关键字"]
一句话抓重点
- 类与对象:类是模板,对象是实例;对象把状态和行为放在一起。
- 封装:把数据藏起来,只通过方法暴露必要操作。
- 访问控制修饰符:决定类、属性、方法能被谁访问。
- 子类与继承:子类复用父类代码,适合明确的
is-a关系。 - 抽象类:提炼一类对象的共同模板,把不确定行为留给子类。
- 接口与实现:定义能力规范,让不同类在同一规则下协作。
- 多态:父类或接口引用指向子类对象,调用时按实际对象执行。
- Object类:所有类的共同祖先,
toString()、equals()等方法来自这里。 - static关键字:属于类本身,不属于某个对象。
- final关键字:限制改变,可修饰类、方法、变量。
容易混淆
| 概念 | 重点区分 |
|---|---|
| 方法重载 vs 方法重写 | 重载看参数列表,发生在同一类;重写看继承关系,子类改写父类方法 |
| 抽象类 vs 接口 | 抽象类偏“是什么”,接口偏“能做什么” |
| 成员变量 vs 局部变量 | 成员变量有默认值,局部变量必须手动初始化 |
this vs super | this 指当前对象,super 指父类部分 |
static vs 实例成员 | static 随类加载,实例成员随对象创建 |
final 引用 vs 不可变对象 | final 引用不能换地址,但对象内部状态不一定不可变 |
复习检查
- 能否画出一个类的属性、构造方法、普通方法?
- 能否解释
private字段为什么通常配合 getter/setter? - 能否说明子类构造方法为什么先调用父类构造方法?
- 能否判断一个场景该用继承、抽象类还是接口?
- 能否用“编译时类型”和“运行时类型”解释多态?