面向对象编程的三大核心特征:封装、继承与多态

118人浏览 / 0人评论 / 添加收藏

学习面对对象编程的技术时候,不得不面向对象编程的三大核心特征:封装、继承和多态‌,这三个特征共同构成了面向对象编程技术的理论基础和实现手段。‌‌

‌1、封装‌

‌定义‌:将数据(属性)与操作数据的方法(行为)捆绑为独立单元(类),并通过访问控制隐藏内部实现细节,仅对外暴露必要接口。‌‌

示例:Java中的private字段配合public方法实现访问控制。
核心作用:提高数据安全性、降低模块耦合度、增强代码可维护性。‌‌

‌实现方式‌:

使用访问修饰符(如Java的private/protected/public)。
通过getter/setter方法控制属性访问。‌‌

实例:

public class Person {
 private String name; // private = 禁止进入

 // Getter
 public String getName() {
   return name;
 }

 // Setter
 public void setName(String newName) {
   this.name = newName;
 }
}

public class Main {
 public static void main(String[] args) {
   Person myObj = new Person();
   myObj.name = "Bill";  // 错误
   System.out.println(myObj.name); // 错误 

   myObj.setName("Bill"); // 成功 将 name 变量的值设置为 "Bill" 
   System.out.println(myObj.getName());
 }
}

我们只能通过get和set方法访问方法。

2‌、继承‌

‌机制特性‌:允许新类(子类)获取现有类(父类)的属性和方法,并通过扩展或重写实现代码复用与功能扩展。‌‌

继承类型:单继承(Java/Python)与多继承(C++)。
‌技术优势‌:

减少代码冗余。
建立类层次结构。
支持多态实现基础。‌‌

代码示例:class Car extends Vehicle表示Car类继承Vehicle类。‌‌

class Vehicle {
 protected String brand = "Ford";        // Vehicle 属性
 public void honk() {                    // Vehicle 方法
   System.out.println("Tuut, tuut!");
 }
}

class Car extends Vehicle {
 private String modelName = "Mustang";    // Car 属性
 public static void main(String[] args) {

   // 创建 myCar 对象
   Car myCar = new Car();

   // 调用 myCar 对象上的 honk() 方法(来自 Vehicle 类)
   myCar.honk();

   // 显示 brand 属性的值(来自 Vehicle 类)和来自 Car 类的 modelName 的值
   System.out.println(myCar.brand + " " + myCar.modelName);
 }
}

final 关键词
如果您不希望其他类从某个类继承,请使用 final 关键字:

如果您尝试访问 final 类,Java 将生成错误。

3、多态‌

‌表现形式‌:

编译时多态:方法重载(相同方法名不同参数)。
运行时多态:方法重写(子类覆盖父类方法)。‌‌
示例:C++虚函数、Java接口实现。‌‌

‌实现条件‌:

继承关系存在。
方法重写。
父类引用指向子类对象。‌‌

实例:例如,请思考名为 Animal 的超类,它有一个名为 animalSound() 的方法。Animals 的子类可以是 Pigs、Cats、Dogs、Birds - 而且它们也有自己的动物声音实现(猪的 oinks 和猫的 meows 等):

class Animal {
 public void animalSound() {
   System.out.println("The animal makes a sound");
 }
}

class Pig extends Animal {
 public void animalSound() {
   System.out.println("The pig says: wee wee");
 }
}

class Dog extends Animal {
 public void animalSound() {
   System.out.println("The dog says: bow wow");
 }
}

class Main {
 public static void main(String[] args) {
   Animal myAnimal = new Animal();  // 创建 Animal 对象
   Animal myPig = new Pig();  // 创建 Pig 对象
   Animal myDog = new Dog();  // 创建 Dog 对象
   myAnimal.animalSound();
   myPig.animalSound();
   myDog.animalSound();
 }
}

我们可以创建 Pig 和 Dog 对象,并为它们调用 animalSound() 方法。

‌最后总结面:其核心价值‌

增强程序扩展性。
提高代码灵活性。
简化复杂系统设计。‌‌

全部评论