面向对象术语

面向对象术语

Claude Opus 5.5(High)#

面向对象的术语可以分成几组:基本单元、核心特性、继承相关、类之间的关系、设计原则。最后是重构,它其实不属于面向对象,后面单独讲。下面用一个例子贯穿始终。

Java
abstract class Animal {                 // 抽象类
    private String name;                // 字段(属性),private = 封装
    public Animal(String name) {        // 构造函数
        this.name = name;
    }
    public String getName() { return name; }
    public abstract String speak();     // 抽象方法:只声明,不实现
}

class Dog extends Animal implements Pet {   // 继承 Animal,实现 Pet 接口
    public Dog(String name) { super(name); }   // super 调用父类构造

    @Override
    public String speak() { return "汪"; }      // 重写

    public void eat() { }                       // 重载:同名不同参
    public void eat(String food) { }
}

interface Pet { }                        // 接口

Animal a = new Dog("旺财");               // 对象 / 实例
a.speak();                                // 多态:运行时调用 Dog 的版本

一、基本单元#

  • 类(Class):模板,相当于图纸。Animal、Dog 都是类。
  • 对象 / 实例(Object / Instance):按图纸造出来的具体东西。new Dog("旺财") 就是一个实例。"实例化"指从类创建对象的过程。
  • 属性 / 字段(Field / Attribute):对象持有的数据,比如 name。
  • 方法(Method):对象能做的事,比如 speak()。
  • 构造函数(Constructor):创建对象时自动执行,负责初始化。
  • 静态成员(static):属于类本身,不属于某个具体对象。所有实例共享一份,不用 new 就能调用。
  • this / self:指"当前这个对象自己"。

二、四大特性(面试最常问)#

  1. 封装(Encapsulation):把数据藏起来(private),只通过方法对外开放(getName())。目的是外部不能乱改内部状态。
    • 配套的是访问修饰符:public 谁都能用,protected 自己和子类能用,private 只有自己能用。
  2. 继承(Inheritance):子类自动获得父类的属性和方法,再加上自己的。Dog extends Animal,表达的是"狗是一种动物"(is-a 关系)。
    • 父类也叫基类、超类;子类也叫派生类。
  3. 多态(Polymorphism):同一个调用,作用在不同对象上,表现不同。变量类型写的是 Animal,a.speak() 实际执行哪个版本,看运行时它到底是 Dog 还是 Cat。
    • 子类对象当父类用叫向上转型;反过来强转回子类叫向下转型。
  4. 抽象(Abstraction):只暴露"做什么",隐藏"怎么做"。抽象类和接口就是它的工具。

三、继承相关(最容易混的一组)#

  • 重写 / 覆盖(Override):子类重新实现父类已有的方法,方法名、参数完全一样。Dog 的 speak() 就是。它是多态的基础。
  • 重载(Overload):同一个类里有多个同名方法,参数不同。两个 eat 就是。它和继承无关,编译时就能确定调用哪个。
  • super:在子类里调用父类的东西。
  • 抽象类(Abstract Class):不能直接 new,可以有部分实现,留一些抽象方法给子类补全。
  • 接口(Interface):纯粹的"能力契约",规定必须有哪些方法。一个类只能继承一个父类,但可以实现多个接口。
  • 多重继承:一个类同时继承多个父类。C++ 支持,Java/C# 不支持(用接口代替),因为会引出"菱形继承"问题:两个父类有同名方法,不知道该用哪个。

四、类与类之间的关系#

由弱到强:

  • 依赖(Dependency):临时用一下,比如方法参数里出现了另一个类。
  • 关联(Association):长期持有对方的引用,比如学生和老师。
  • 聚合(Aggregation):整体和部分,但部分可以独立存在,比如班级和学生。
  • 组合(Composition):整体和部分,部分随整体一起生灭,比如人和心脏。
  • 继承:is-a,耦合最强。

有句常听到的话叫"组合优于继承":能用"有一个"(has-a)解决的,就别用"是一个"(is-a),因为继承把父子类绑得太死。

五、设计层面#

  • 耦合(Coupling):类之间互相依赖的程度,越低越好。
  • 内聚(Cohesion):一个类内部的东西是否都围绕同一件事,越高越好。
  • SOLID 原则:
    • 单一职责:一个类只干一件事。
    • 开闭原则:对扩展开放,对修改关闭。
    • 里氏替换:子类必须能无缝替代父类。
    • 接口隔离:接口要小而专。
    • 依赖倒置:依赖抽象,不依赖具体实现。
  • 设计模式(Design Pattern):前人总结的常见问题的标准解法,比如单例、工厂、观察者、策略。

六、重构(Refactoring)#

严格说它不是面向对象的术语,而是一种开发实践:不改变代码的外部行为,只改善内部结构。常见手法有提取方法、重命名、拆分大类、用多态替代一长串 if/else。判断标准很简单:重构前后,所有测试结果必须完全一样。


最容易混的三个#

重写 Override重载 Overload重构 Refactor
发生在哪父类与子类之间同一个类内整个代码库
方法签名完全相同同名,参数不同不相关
目的实现多态方便调用改善结构
何时确定运行时编译时不涉及

检验一下:如果 Dog 里再写一个 public String speak(int times),它算重写还是重载?为什么?

键盘快捷键

全站

CtrlK
搜索
/
搜索
?
显示快捷键
Esc
关闭弹窗、退出模式

阅读文章

T
目录
F
专注模式
A
批注模式

批注模式

P
笔
H
荧光笔
L
激光笔
E
橡皮擦
1–6
切换颜色
Shift
按住拖动画直线
CtrlZ
撤销
CtrlShiftZ
重做