面向对象编程

在面向对象编程中,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:使用 getset 关键字,允许开发者像访问普通属性一样触发方法(如 person.age = 20),在后台自动执行验证或计算逻辑。
  • Python:通过 @property@xxx.setter 装饰器,将普通方法转化为类似属性的访问方式,使代码更加优雅。

总而言之,Getter 和 Setter 就像是对象内部数据的“门卫”,它们在保证数据安全和一致性的同时,提供了灵活的访问控制机制

posted @ 2026-06-18 16:09  Doll_Marker  阅读(17)  评论(0)    收藏  举报