码迷,mamicode.com
首页 > 其他好文 > 详细

黑马程序员--oc 类的封装 继承 和多态

时间:2015-04-01 00:05:15      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

 

成员变量的命名规范:

成员变量名要以 _开头

作用:

1.可以让成员变量和get方法的名称区分开

2.可以和局部变量区分开,一看到以_开头的变量一般都是成员变量

封装:

在定义成员变量时,尽量不要用@public 这种写法 ,而是使用set方法和get方法

@interface Student : NSObject

{

int _age;

}

 

/*

set方法:

作用:提供一个方法给外界设置成员变量的值,可以对里面的参数进行过滤

命名规范:

以set开头

set后跟成员变量的名字,成员变量的首字母大写

返回值是(void)

一定要接受一个参数,参数的类型和成员变量类型一样

形参的名称不能和成员变量名一样

*/

- (void)setAge:(int)age
/*


get方法

作用:返回对象内部的成员变量

命名规范:

肯定有返回值,返回值类型肯定与成员变量类型一致

方法名跟成员变量名一样

不需要接收任何参数

*/

- (int)age;

@end

 

int main()

{

Student *stu = [Student new];

[stu setAge:10]; //调用set方法设置成员变量的值

[stuage]; //调用get方法读取成员变量的值

return 0;

}


如果内部成员变量制度不能修改只需要提供get方法即可

 

对象方法

1>减号 - 开头

2>只能由对象来调用

3>对象方法中能访问当前对象的成员变量(实例变量)

类方法

类方法以+开头,

只能由类调用.

实例变量(成员变量)不能在类方法中访问

类方法调用类方法会死循环

+ (void)test

{

NSLog(@"%33");

[Person test]

} //会一直输出33 死循环

 

好处和使用场合:

1>不依赖于对象,执行效率高

2>能用类方法尽量用类方法

3>当方法内部不需要使用到成员变量时,可以利用类方法

对象方法

对象方法以-开头

对象方法只能由对象来调用

能访问当前对象的成员变量

对象方法可以调用类方法

允许类方法和对象方法同名

工具类:基本不包含任何成员变量,里面的方法基本都是类方法,可以调用之前的类方法

self 关键字

self 是一个指针指向调用当前方法的对象

谁调用了当前方法,self就代表谁

self出现在对象方法中,self就代表对象

self出现在类方法中,self就代表类

self用途

1> 对象方法中可以通过 self->成员变量名访问当前对象内部的成员变量名

2> [self 方法名]; [self bark]; 可以调用其他对象方法和类方法

3>谁调用了当前方法,self就代表谁

* self出现在对象方法中,self就代表对象

* self出现在类方法中,self就代表类

2>在对象方法利用"self->成员变量名"访问当前对象内部的成员变量

self注意点

1.要清楚明白是对象还是类在调用self

2.self不能调用函数方法

继承

是类与类之间的关系

1.继承的好处:

1>抽取重复代码

2>建立了类之间的关系

3>子类可以拥有父类中的所有成员变量和方法

2.注意点

1>基本上所有类的根类是NSObject

2>父类必须声明在子类的前面

3>子类不能拥有和父类相同的成员变量

4>调用某个方法时,优先去当前类中找,如果找不到,去父类中找

重写:子类重新实现父类中的某个方法,覆盖父类以前的做法

父类中声明不实现,在子类中实现也是可以的

使用场合

当两个类拥有相同属性和方法的时候,就可以将相同的东西抽取到一个父类中

当A类完全拥有B类中的部分属性和方法时,可以考虑让B类继承A类

坏处:耦合性太强

//Animal的声明

@interface Animal : NSObject

{

int _age;

}

- (void)setAge:(int)age;

- (int)age;

@end

//Animal的实现

@implementation Animal

- (void)setAge:(int)age

{

_age = age;

}

- (int)age

{

return _age;

}

@end


//定义一个dog类

// : Animal 继承了Animal,相当于拥有了Animal里面的所有成员变量和方法

// Animal称为Dog的父类

// Dog称为Animal的子类

@interface Dog : Animal

@end

@implementation Dog

@end

int main()

{

Dog *d = [Dog new];

[d setAge:10];

NSLog(@"age=%d", [d age]);

return 0;

}

 

关键字super的作用

1.直接调用父类中的某个方法

2.super处在对象方法中,那么就会调用父类的对象方法

super处在类方法中,那么就会调用父类的类方法

3.使用场合:子类重写父类的方法时想保留父类的一些行为

,是子类在父类基础上的延伸

*/

多态

只有由继承才有多态

多态

没有继承就没有多态

代码的体现:父类类型的指针指向子类对象

好处:如果函数\方法参数中使用的是父类类型,可以传入父类、子类对象

局限性:

父类类型的变量不能直接调用子类特有的方法。必须强转为子类类型变量后,才能直接调用子类特有的方法

*/

 

黑马程序员--oc 类的封装 继承 和多态

标签:

原文地址:http://www.cnblogs.com/lxiaohei103/p/4382315.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!