封装、继承、多态 —— 这三个词背得滚瓜烂熟但你真的会用代码讲清楚吗 你好我是 Evan一名计算机专业的学长也是《大一突围》专栏的作者。记得大一学 Java 时老师让我们背“OOP 三大特性”考试也能默写定义但让我写代码解释什么是多态我就懵了。今天这篇文章我不讲枯燥定义而是直接用Python、Java、C三种语言的对比示例帮你彻底搞懂封装、继承、多态到底是什么、怎么用、区别在哪。欢迎来到《大一突围》专栏。一、OOP 三大特性一句话概括二、封装Encapsulation 什么是封装将数据属性和操作数据的方法捆绑在一起并隐藏内部实现细节只对外暴露必要的接口如get/set方法。就像一台电视机你只需要按遥控器接口不用管内部电路。 封装的好处安全性防止外部直接修改内部数据。模块化修改内部实现不影响外部调用。易维护代码更清晰。 代码示例Python / Java / C Python 示例class Student: def __init__(self, name, age): self.__name name # 双下划线表示私有属性 self.__age age def get_name(self): return self.__name def set_age(self, age): if age 0: self.__age age else: print(年龄无效) def display(self): print(f姓名: {self.__name}, 年龄: {self.__age}) # 使用 s Student(张三, 20) print(s.get_name()) # 通过公有方法访问 s.set_age(21) s.display()☕ Java 示例public class Student { private String name; private int age; // 构造方法 public Student(String name, int age) { this.name name; this.age age; } // 公有 getter/setter public String getName() { return name; } public void setAge(int age) { if (age 0) { this.age age; } else { System.out.println(年龄无效); } } public void display() { System.out.println(姓名: name , 年龄: age); } }⚙️ C 示例#include iostream #include string using namespace std; class Student { private: string name; int age; public: Student(string n, int a) : name(n), age(a) {} string getName() { return name; } void setAge(int a) { if (a 0) age a; else cout 年龄无效 endl; } void display() { cout 姓名: name , 年龄: age endl; } };小结封装就是“把成员变量设为私有通过公有方法访问”。三种语言语法略有不同但思想完全一致。三、继承Inheritance 什么是继承子类派生类可以复用父类基类的属性和方法并可以添加自己特有的内容或重写父类方法。 继承的好处代码复用避免重复编写相同代码。层次结构符合现实世界分类如动物 → 猫、狗。 代码示例 Python 示例class Animal: def __init__(self, name): self.name name def eat(self): print(f{self.name} 正在吃东西) class Dog(Animal): def bark(self): print(f{self.name} 在汪汪叫) # 使用 dog Dog(旺财) dog.eat() # 继承自 Animal dog.bark() # Dog 自己的方法☕ Java 示例class Animal { String name; Animal(String name) { this.name name; } void eat() { System.out.println(name 正在吃东西); } } class Dog extends Animal { Dog(String name) { super(name); } void bark() { System.out.println(name 在汪汪叫); } } // 使用 Dog dog new Dog(旺财); dog.eat(); dog.bark();⚙️ C 示例class Animal { public: string name; Animal(string n) : name(n) {} void eat() { cout name 正在吃东西 endl; } }; class Dog : public Animal { public: Dog(string n) : Animal(n) {} void bark() { cout name 在汪汪叫 endl; } };小结继承关系用extendsJava、: publicC或直接括号Python表示。子类可调用父类方法也可扩展自己的方法。四、多态Polymorphism 什么是多态同一个方法调用因为对象类型不同表现出不同的行为。多态需要三个条件继承、方法重写、父类引用指向子类对象。 多态的好处扩展性新增子类不影响原有代码。接口统一父类类型可以接收任意子类对象调用相同方法产生不同结果。 代码示例 Python 示例鸭子类型 继承多态class Animal: def speak(self): pass class Dog(Animal): def speak(self): print(汪汪) class Cat(Animal): def speak(self): print(喵喵) def make_sound(animal): animal.speak() # 使用 dog Dog() cat Cat() make_sound(dog) # 汪汪 make_sound(cat) # 喵喵☕ Java 示例class Animal { void speak() {} } class Dog extends Animal { void speak() { System.out.println(汪汪); } } class Cat extends Animal { void speak() { System.out.println(喵喵); } } // 使用 Animal a1 new Dog(); Animal a2 new Cat(); a1.speak(); // 汪汪 a2.speak(); // 喵喵⚙️ C 示例需虚函数class Animal { public: virtual void speak() 0; // 纯虚函数 }; class Dog : public Animal { public: void speak() override { cout 汪汪 endl; } }; class Cat : public Animal { public: void speak() override { cout 喵喵 endl; } }; // 使用 Animal* a1 new Dog(); Animal* a2 new Cat(); a1-speak(); // 汪汪 a2-speak(); // 喵喵注意C 中需要virtual关键字来实现运行时多态否则会调用父类版本静态绑定。五、三大特性对比总结表六、用一句话记住三大特性封装我只让你用遥控器不让你拆电视机。继承我站在巨人的肩膀上少写重复代码。多态都是“动物”狗叫“汪汪”猫叫“喵喵”。❓ 问题你在学习 OOP 时哪个特性最难理解或者你能否举一个生活中的例子来说明多态欢迎在评论区分享你的理解或困惑我会选出 3 位同学送出《OOP 常见面试题 代码案例集》。如果本文帮你搞懂了 OOP 三大特性请点 赞 关注本专栏《大一突围》持续更新基础编程干货。收藏本文遇到 OOP 问题随时回看对比代码。
面向对象编程(OOP)三大特性:封装、继承、多态
发布时间:2026/5/20 10:53:37
封装、继承、多态 —— 这三个词背得滚瓜烂熟但你真的会用代码讲清楚吗 你好我是 Evan一名计算机专业的学长也是《大一突围》专栏的作者。记得大一学 Java 时老师让我们背“OOP 三大特性”考试也能默写定义但让我写代码解释什么是多态我就懵了。今天这篇文章我不讲枯燥定义而是直接用Python、Java、C三种语言的对比示例帮你彻底搞懂封装、继承、多态到底是什么、怎么用、区别在哪。欢迎来到《大一突围》专栏。一、OOP 三大特性一句话概括二、封装Encapsulation 什么是封装将数据属性和操作数据的方法捆绑在一起并隐藏内部实现细节只对外暴露必要的接口如get/set方法。就像一台电视机你只需要按遥控器接口不用管内部电路。 封装的好处安全性防止外部直接修改内部数据。模块化修改内部实现不影响外部调用。易维护代码更清晰。 代码示例Python / Java / C Python 示例class Student: def __init__(self, name, age): self.__name name # 双下划线表示私有属性 self.__age age def get_name(self): return self.__name def set_age(self, age): if age 0: self.__age age else: print(年龄无效) def display(self): print(f姓名: {self.__name}, 年龄: {self.__age}) # 使用 s Student(张三, 20) print(s.get_name()) # 通过公有方法访问 s.set_age(21) s.display()☕ Java 示例public class Student { private String name; private int age; // 构造方法 public Student(String name, int age) { this.name name; this.age age; } // 公有 getter/setter public String getName() { return name; } public void setAge(int age) { if (age 0) { this.age age; } else { System.out.println(年龄无效); } } public void display() { System.out.println(姓名: name , 年龄: age); } }⚙️ C 示例#include iostream #include string using namespace std; class Student { private: string name; int age; public: Student(string n, int a) : name(n), age(a) {} string getName() { return name; } void setAge(int a) { if (a 0) age a; else cout 年龄无效 endl; } void display() { cout 姓名: name , 年龄: age endl; } };小结封装就是“把成员变量设为私有通过公有方法访问”。三种语言语法略有不同但思想完全一致。三、继承Inheritance 什么是继承子类派生类可以复用父类基类的属性和方法并可以添加自己特有的内容或重写父类方法。 继承的好处代码复用避免重复编写相同代码。层次结构符合现实世界分类如动物 → 猫、狗。 代码示例 Python 示例class Animal: def __init__(self, name): self.name name def eat(self): print(f{self.name} 正在吃东西) class Dog(Animal): def bark(self): print(f{self.name} 在汪汪叫) # 使用 dog Dog(旺财) dog.eat() # 继承自 Animal dog.bark() # Dog 自己的方法☕ Java 示例class Animal { String name; Animal(String name) { this.name name; } void eat() { System.out.println(name 正在吃东西); } } class Dog extends Animal { Dog(String name) { super(name); } void bark() { System.out.println(name 在汪汪叫); } } // 使用 Dog dog new Dog(旺财); dog.eat(); dog.bark();⚙️ C 示例class Animal { public: string name; Animal(string n) : name(n) {} void eat() { cout name 正在吃东西 endl; } }; class Dog : public Animal { public: Dog(string n) : Animal(n) {} void bark() { cout name 在汪汪叫 endl; } };小结继承关系用extendsJava、: publicC或直接括号Python表示。子类可调用父类方法也可扩展自己的方法。四、多态Polymorphism 什么是多态同一个方法调用因为对象类型不同表现出不同的行为。多态需要三个条件继承、方法重写、父类引用指向子类对象。 多态的好处扩展性新增子类不影响原有代码。接口统一父类类型可以接收任意子类对象调用相同方法产生不同结果。 代码示例 Python 示例鸭子类型 继承多态class Animal: def speak(self): pass class Dog(Animal): def speak(self): print(汪汪) class Cat(Animal): def speak(self): print(喵喵) def make_sound(animal): animal.speak() # 使用 dog Dog() cat Cat() make_sound(dog) # 汪汪 make_sound(cat) # 喵喵☕ Java 示例class Animal { void speak() {} } class Dog extends Animal { void speak() { System.out.println(汪汪); } } class Cat extends Animal { void speak() { System.out.println(喵喵); } } // 使用 Animal a1 new Dog(); Animal a2 new Cat(); a1.speak(); // 汪汪 a2.speak(); // 喵喵⚙️ C 示例需虚函数class Animal { public: virtual void speak() 0; // 纯虚函数 }; class Dog : public Animal { public: void speak() override { cout 汪汪 endl; } }; class Cat : public Animal { public: void speak() override { cout 喵喵 endl; } }; // 使用 Animal* a1 new Dog(); Animal* a2 new Cat(); a1-speak(); // 汪汪 a2-speak(); // 喵喵注意C 中需要virtual关键字来实现运行时多态否则会调用父类版本静态绑定。五、三大特性对比总结表六、用一句话记住三大特性封装我只让你用遥控器不让你拆电视机。继承我站在巨人的肩膀上少写重复代码。多态都是“动物”狗叫“汪汪”猫叫“喵喵”。❓ 问题你在学习 OOP 时哪个特性最难理解或者你能否举一个生活中的例子来说明多态欢迎在评论区分享你的理解或困惑我会选出 3 位同学送出《OOP 常见面试题 代码案例集》。如果本文帮你搞懂了 OOP 三大特性请点 赞 关注本专栏《大一突围》持续更新基础编程干货。收藏本文遇到 OOP 问题随时回看对比代码。