属性的封装


如何实现这个需求

  1. 去掉属性的@public
  2. 为类提供一个setter方法专门为这个属性赋值
  • 这个方法一定是一个对象方法,因为这个要为属性赋值。
  • 这个方法没有返回值。
  • 这个方法的名称必须以set开头,跟上去掉下划线首字母大写的属性名。
  • 这个方法一定有参数,参数的类型和属性的类型一致,参数的名称和属性的名称一致(去掉下划线)。
  • 在方法的实现中,判断传入的数据是否符合逻辑,如果符合逻辑则赋值,否则默认处理。
-(void)setAge:(int)age
{
	判断语句
}
  • 外界想要为对象的属性赋值,那么就调用这个对象的setter方法,将要赋值的数据传入给这个方法。方法会对这个数据进行验证,如果符合验证,就会吧数据赋值给属性,否则做默认处理。
  1. 外界取出封装的值(getter方法)
  • 这个方法一定是一个对象方法,因为这个方法做的事情是拿到属性的返回值。
  • 这个方法肯定有返回值,返回值的类型和属性的类型一致。
  • 这个方法的名称是属性的名称去掉下划线
  • 这个方法没有参数
  • 这个方法的实现是直接将属性的值返回
-(int)age
{
	return _age;
}
//调用
[p1 age]
  1. 什么时候需要为属性封装setter和getter?
  • 只要属性需要被外界访问,那么就要为这个属性封装setter和getter,哪怕没有逻辑验证。
  • 如果属性只在内部访问,就不需要使用
  • 只读(只写setter),只写(getter)
学习