面向对象的三大特性?
封装
定义与目的
- 将数据和操作这些数据的方法绑定在一起,形成一个类,并通过访问控制机制限制外部对类内部数据和方法的直接访问。
- 保护数据的安全性和完整性,避免外部代码随意修改内部数据,同时提高代码的可维护性和可扩展性。
实现方法
- 使用访问修饰符(如 private、protected、public)来控制类成员的访问权限
访问修饰符 | 谁可以访问 |
---|
private | 类自身 |
protected | 类自身 + 子类 |
public | 任何代码 |
- 提供公共的方法(通常称为 getter 和 setter 方法)来获取和设置私有成员变量的值
public class FZ {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
if (name != null && !name.isEmpty()) {
this.name = name;
} else {
System.out.println("姓名不能为空!");
}
}
}
作用与好处
- 保护数据:防止外部代码意外修改或破坏内部数据,提高数据的安全性。
- 提高代码的可维护性:当内部实现发生变化时,只需要修改类内部的代码,而不会影响外部调用者。
- 隐藏实现细节:外部代码不需要了解类的内部实现,只需要通过公共接口进行交互,降低了代码的耦合度。
继承
定义与目的
- 创建新类的方式,新类(子类)可以继承现有类(父类)的属性和方法,同时可以添加自己的新属性和新方法。
- 实现代码的复用,减少重复代码的编写,同时建立类之间的层次关系,便于对问题进行抽象和建模
实现方式
- 使用关键字**“extends”**来表示子类继承父类
class Cats extends Animal
- 子类可以访问父类的非私有成员(包括成员变量和成员方法),并可以在子类中重写父类的方法以实现特定的行为。
作用与好处
- 代码复用:子类可以直接使用父类的代码,避免了重复编写相同的代码,提高了开发效率。
- 层次结构:建立类之间的层次关系,便于对复杂系统进行建模和理解。
- 例如,在面向对象的图形绘制系统中,可以定义一个抽象的图形类作为父类,然后派生出各种具体的图形类,如圆形、矩形等。
- 多态的基础:继承是实现多态的重要基础,通过继承关系可以在运行时根据对象的实际类型动态地调用相应的方法。
多态
定义与目的
- 同一个行为具有多种不同的表现形式
- 方法的重写、重载,父类引用调用子类对象的方法
- 提高代码的灵活性和可扩展性,使得程序能够根据不同的对象类型自动选择合适的方法进行调用。
实现方法
- 方法重写:子类重写父类中的方法,以实现不同的行为。在运行时,根据对象的实际类型来决定调用哪个重写的方法。
- 方法重载:在同一个类中定义多个同名方法,但参数列表不同。在调用时,根据传递的参数自动选择合适的方法。
- 父类引用指向子类对象:通过父类引用调用子类对象的方法,实际执行的是子类中重写的方法。
- 例如:
“SuperClass obj = new SubClass(); obj.method();”
,这里虽然声明的是父类引用,但实际指向的是子类对象,调用的是子类中重写的 method 方法。
作用与好处
- 灵活性:可以根据不同的情况动态地选择不同的实现方式,提高了代码的适应性。
- 可扩展性:在不修改现有代码的基础上,可以通过添加新的子类来扩展系统的功能,符合开闭原则。
- 代码的简洁性:可以使用统一的接口来处理不同类型的对象,减少了代码的复杂性。
总结
| 定义 | 目的 | 实现方法 | 作用与好处 |
---|
封装 | 数据与方法绑定形成一个类 | 保护数据的安全性和完整性 | 访问修饰符:访问权限;getter与setter方法:获取值 | 保护数据;⬆️可维护性;隐藏实现细节 |
继承 | 子类继承父类的属性与方法 | 实现代码的复用 | extends | 代码复用;层次结构;多态 |
多态 | 同一种行为具有多种不同的表现形式 | ⬆️灵活性、可扩展性 | 重写;重载;父类引用指向子类对象 | 灵活性;可扩展性;简洁性 |
学习地址