-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
-----------第一遍看,第二理解思路,第三遍练-----------
1> 封装 2>组合 3>多态
一、封装:
为什么要封装:为了因为防止成员变量暴露
什么是封装:提供一个可以给外界读取或者修改成员变量的方法
setter and getter
setter方法是给外界提供一个修改成员变量的方法
getter 是给外界提供一个读取成员变量的方法
命名规范:
set方法和get方法都是对象方法所以都是以 - 开头 只有对象可以调用
set方法的命名规范:因为是写入而不是读取,所以他就不需要有返回值 不需要返回值那么就不用设置返回类型 就用void
-(void)setAge:(int)age;
以set开头+变量名第一个字母大写:+变量类型+形参名
方法内部则是 将得到的相同类型的值通过形参负值给成员变量
如: _age = age;
set方法还有一个很好的作用就是过滤 如果你想给实例参数的值定义一个范围
要求:定义一个年龄不能超过30岁的实例参数
- (void)setAge:(int)age
{
if(age >30)//这里就是过滤 如果超过30岁就修改为30
{
age = 30
}
_age = age;
}
get方法因为有返回值 所以根据成员变量的类型来定义返回值的类型 以-开头括号里写入返回值类型形参名定义为
变量名不加_下划线 内部则是通过renturn 直接返回成员变量的值
如:
-(int)age
{
return _age;
}
self
self 是一个指针 ,他代表调用方法者的本身 ,他使用在方法内部, 类或者对象,谁调用他 他就代表谁
self 使用唯一注意点就是, 在A方法中 不能使用self调用A方法 会导致死循环
二、继承:
继承,代表两个类之间的关系, 父类和子类
特点,子类继承父类的所有属性和方法,好处 抽取重复代码,建立了类之间的关系;
继承的格式:
@interface Student : Person 冒号前面是子类 后面是父类 也就是说 Student 是 Person 的子类
Student 拥有Person 所有的属性和方法
注意点:1.子类不能创建和父类相同名称的实例变量 2. 子类重写父类的方法后,程序执行后会先到子类寻找方法
如果子类中存在和父类一样的方法 就会调用子类。
super 超级 代表父类的意思 他一般使用在继承中
他可以直掉调用父类中的某个方法 和self一样 super放在类方法中 代表类 放在对象方法中就代表对象
使用场合,当子类重写父类的方法 但是又想保留负累方法的时候
标准例子是构造方法
- (id)init
{
if(self = [super init])//这里就是想保留父类的init方法
{
// 这里放一些初始化的实例变量值
}
return self;
}
多态:
多态是建立在继承的基础上 老师没讲的很细致唯一的作用就知道 当子类使用一个共同的函数时候
就使用多态,将父类放进函数中 那么子类 也可以调用导入函数中
如:
void eat(Person *p)
{
[p eat];
}
Person *p = [[Student alloc ] init];
这样就叫多态 就可以传入到函数中 调用方法
注意点,首先要有继承,没有继承就没有多态 函数中调用的方法必须父类和子类同时拥有
限制;父类的指针式不能调用子类子类的方法的 例如
[p (sutdent)eat]的方法 这样是不行的
如果想调用必须 强制转换p为student指针
Student *s1 = (Student *)p;
[s1 eat]