面对对象的程序与设计(基础入门)

面向对象不是先背语法,而是学会把“问题”拆成“对象”、把“变化”藏在稳定接口后面。

总览

面向对象程序设计(OOP)围绕三个问题展开:

  1. 谁来负责这件事:用类与对象描述对象的属性和行为。
  2. 哪些细节不该暴露:用封装访问控制修饰符保护对象内部状态。
  3. 如何复用与扩展:用子类与继承抽象类接口与实现多态组织变化。

学习路径

核心概念关系

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 superthis 指当前对象,super 指父类部分
static vs 实例成员static 随类加载,实例成员随对象创建
final 引用 vs 不可变对象final 引用不能换地址,但对象内部状态不一定不可变

复习检查

  • 能否画出一个类的属性、构造方法、普通方法?
  • 能否解释 private 字段为什么通常配合 getter/setter?
  • 能否说明子类构造方法为什么先调用父类构造方法?
  • 能否判断一个场景该用继承、抽象类还是接口?
  • 能否用“编译时类型”和“运行时类型”解释多态?