私有属性的 getter 与 setter 方法通过公共方法控制对私有字段的读写,实现数据保护、逻辑校验和封装;java 用 getxxx()/setxxx() 约定,typescript 用 get/set 访问器,python 用 @property,javascript 用 get/set 关键字。

私有属性的 Getter 与 Setter 方法,核心是通过公共方法控制对私有字段的读写,既保护数据,又支持逻辑校验和封装。在 Java、C#、TypeScript 等语言中,通常用 private 字段 + public 方法实现;Python 则常用 @property 和 @xxx.setter 装饰器;JavaScript(ES6+)可用 get/set 关键字定义访问器属性。
Java 中的标准写法
Java 没有原生的属性语法,靠约定俗成的 getter/setter 命名规范(getXxx() / setXxx(value))来模拟属性访问:
- 私有字段声明为
private,例如:private String name; - Getter 方法返回字段值,无参数,命名以
get开头(布尔类型可用isXxx()),例如:public String getName() { return name; } - Setter 方法接收一个参数,不返回值(
void),命名以set开头,例如:public void setName(String name) { this.name = name; } - 可在 setter 中加入校验逻辑,如:
if (name == null || name.trim().isEmpty()) throw new IllegalArgumentException("Name cannot be empty");
TypeScript 中用访问器(Accessors)
TypeScript 支持 get 和 set 访问器,语法更接近“属性”语义,但需注意:不能同时存在同名的普通属性和访问器,且访问器必须成对或单独出现(可只写 get 实现只读):
- 私有字段:
private _age: number = 0; - Getter:
get age(): number { return this._age; } - Setter:
set age(value: number) { if (value >= 0 && value - 调用时像普通属性:
person.age = 25;或console.log(person.age);
Python 中用 @property 装饰器
Python 推崇“简单优先”,用 @property 将方法伪装成属性,天然支持封装和后期扩展:
- 私有字段命名习惯加下划线前缀:
self._score = 0 - Getter 写法:
@property+ 方法,例如:@property def score(self): return self._score - Setter 写法:
@score.setter+ 同名方法,例如:@score.setter def score(self, value): if 0 - 使用方式完全像属性:
obj.score = 85、print(obj.score)
JavaScript(类中)的 get/set 语法
ES6 类支持在类体内直接定义 getter/setter,它们属于实例属性(不是原型方法),访问时无括号:
- 私有字段用
#前缀(如#price),确保真正私有 - Getter:
get price() { return this.#price; } - Setter:
set price(value) { if (typeof value === 'number' && value > 0) this.#price = value; } - 注意:私有字段必须在构造函数或字段初始化阶段声明,否则会报错











