学习面对对象编程的技术时候,不得不面向对象编程的三大核心特征:封装、继承和多态,这三个特征共同构成了面向对象编程技术的理论基础和实现手段。
定义:将数据(属性)与操作数据的方法(行为)捆绑为独立单元(类),并通过访问控制隐藏内部实现细节,仅对外暴露必要接口。
示例: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方法访问方法。
机制特性:允许新类(子类)获取现有类(父类)的属性和方法,并通过扩展或重写实现代码复用与功能扩展。
继承类型:单继承(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 将生成错误。
表现形式:
编译时多态:方法重载(相同方法名不同参数)。
运行时多态:方法重写(子类覆盖父类方法)。
示例: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() 方法。
最后总结面:其核心价值
增强程序扩展性。
提高代码灵活性。
简化复杂系统设计。
全部评论