面向对象编程
在面向对象编程中,Getter 和 Setter 是用于读取和修改对象内部属性(成员变量)的公共方法。它们通常成对出现,是程序设计中实现“封装”这一核心概念的重要工具。
1. 核心概念
- Getter(获取器):用于获取对象私有属性的值。通常以
get作为前缀,不接受参数,并返回与属性类型相同的值。 - Setter(设置器):用于设置或修改对象私有属性的值。通常以
set作为前缀,接受一个参数(即要设置的新值),一般不返回任何值(void)。
2. 为什么需要 Getter 和 Setter?
在优秀的代码设计中,对象的内部属性通常会被声明为私有(private),不允许外部直接访问。Getter 和 Setter 充当了外部与内部数据交互的“安全通道”,其主要作用包括:
- 数据验证与过滤:在 Setter 中加入检查逻辑,可以确保传入的数据是合法的。例如,在设置“年龄”属性时,可以拦截负数或超过120的非法值。
- 增强封装性与安全性:隐藏对象内部的实现细节,外部只能通过公共接口与对象交互,防止恶意操作或意外修改。
- 实现计算属性:Getter 不仅可以返回存储的值,还可以返回动态计算的结果。例如,通过宽和高动态计算并返回“面积”,而无需单独存储面积变量。
- 提高代码可维护性:如果未来需要对属性的读写逻辑进行修改(例如增加日志记录、触发事件通知等),只需修改 Getter/Setter 方法内部,而无需更改所有调用该属性的外部代码。
3. 代码示例
以 Java 语言为例,一个包含 Getter 和 Setter 的类通常如下所示:
public class Person {
// 私有属性,外部无法直接访问
private String name;
private int age;
// name 的 Getter
public String getName() {
return name;
}
// name 的 Setter
public void setName(String name) {
this.name = name;
}
// age 的 Getter
public int getAge() {
return age;
}
// age 的 Setter(加入了数据验证逻辑)
public void setAge(int age) {
if (age >= 0 && age <= 120) {
this.age = age;
} else {
System.out.println("年龄不合法,请设置 0-120 之间的值!");
}
}
}
4. 不同语言中的实现差异
虽然 Getter 和 Setter 的思想是通用的,但在不同的编程语言中,其语法表现有所不同:
- Java/C#:通常表现为显式的方法调用(如
person.setAge(20))或属性访问器语法。 - JavaScript:使用
get和set关键字,允许开发者像访问普通属性一样触发方法(如person.age = 20),在后台自动执行验证或计算逻辑。 - Python:通过
@property和@xxx.setter装饰器,将普通方法转化为类似属性的访问方式,使代码更加优雅。
总而言之,Getter 和 Setter 就像是对象内部数据的“门卫”,它们在保证数据安全和一致性的同时,提供了灵活的访问控制机制
本文来自博客园,作者:Doll_Marker,转载请注明原文链接:https://www.cnblogs.com/dollaikun/p/20633924

浙公网安备 33010602011771号