您的位置:首页 > 职场人生

(七)黑马程序员——oc基础之继承与重写构造方法

2015-10-23 06:02 363 查看
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流!-------

例题7、创建一个人(person)的类,默认年龄是18,创建一个学生(student)的类,默认年龄是18,学号是110.

1、源代码实现及模块化知识点拓展

模块一

1.1、person类的声明和实现

#import <Foundation/Foundation.h>

//声明一个person类

@interface person :NSObject

@property int age;

@end

//类现person类

@implementation person

//

-(id)init

{

if ([superinit])

{

//将年龄(age)初始化为18

self.age =18;

//返回一个已经初始化完成的对象

returnself;

}

@end

1.2、知识点拓展

1.2.1
//声明一个person类
@interface person :NSObject
@property int age;
@end

类的声明-->这部分详细知识请见我的第5篇博文《黑马程序员--oc基础之类方法与对象方法的使用比较》

@property关键字

@property是编译器指令,告诉编译器声明属性的访问器(setter/getter)的方法,可免去我们手工书写get和sset方法的繁琐。与传统set和get方法比较,请见我的第6篇博文《黑马程序员--oc基础之封装》。

1.2.2
-(id)init
{
if ([super init])
{
//将年龄(age)初始化为18
self.age =18;
}
//返回一个已经初始化完成的对象
return self;
}<span style="font-family: Menlo; background-color: rgb(255, 255, 255);"> </span>

1、构造方法
用来初始化对象实例变量值的方法,是个对象方法,以 - 开头。

2、重写构造方法

1)、[super init]的作用-->面向对象的体现,先用父类的init方法为子类实例的父类部分属性初始化。

2)、self为甚么要赋值为[super init]-->为了防止父类的初始化方法release掉self指向的空间并重新alloc一块空间。

3)、super作为消息接受者的实质-->super并不是真正的指针,[super message]的实质是由self来接受父类的message。

3、点语法

1)、[stu setAge:10]--> 替换成点语法:stu.age = 10;

2)、int age = [stu age]--> 替换成点语法:int age = stu.age;

3)、oc点语法的本质是方法的调用,不是直接访问成员变量。取值就是get方法,设值就是set方法。

模块二

2.1、student类的声明和实现

//声明一个student类,并继承person类

@interface student :person

@property int num;

@end

//实现student类

@implementation student

//重写构造方法

-(id)init

{

//判断是否alloc成功

if ([super init])

{

//将学号(num)初始化为110

self.num =110;

}

//返回一个已经初始化完成的对象

return self;

}

@end

2.2、知识点拓展——>与1.2几乎一样,这里就不赘述了!
<span style="font-size:14px;">//声明一个student类,并继承person类
@interface student :person
@property int num;
@end</span>
类的继承和派生

1、派生类方法属性 = 基类方法属性 + 派生类自己新增的方法和属性

2、基类的私有属性能被继承,不能被使用。

3、oc中的继承是单继承。一个类只能继承一个父类,不能继承多个父类。

4、继承具有合理性。

模块三

3.1、主函数

int main(int argc,constchar * argv[])

{

@autoreleasepool

{

//创建一个person类的对象

person *p = [person new];

//创建一个student类的对象

student *p1 = [student new];

//输出初始化后的成员变量值

NSLog(@"人的年龄=
%d",p.age);

NSLog(@"学生的年龄=
%d,学号= %d",p1.age,p1.num);

}

return
0;

}
3.2、知识点拓展
3.2.1
//创建一个person类的对象
person *p = [person new];

//创建一个student类的对象
student *p1 = [student new];
创建一个对像——>这部分详细知识请见我的第5篇博文《黑马程序员--oc基础之类方法与对象方法的使用比较》。
3.2.2

<span style="font-size:14px;">//输出初始化后的成员变量值
NSLog(@"人的年龄= %d",p.age);
NSLog(@"学生的年龄= %d,学号= %d",p1.age,p1.num);</span>
点语法的使用——>在1.2.2已详细阐述,这里就不赘述了!

学习心得
(1)这是我的第8篇博文,也是oc基础的最后一篇博文,本文主要通过一个例题将@property关键字、点语法、继承与派生等基础知识综合起来,并对相关知识点进行详细阐述,至此,我感觉自己的oc基础知识更加扎实了。
(2)每一次我都会花至少3个小时写一篇博文,每每有灵感,每一篇博文都会经过很多次修改,不仅是自己有一种追求完美的癖好,更是每一次写博文,都是对我的知识库的全面复习,让自己的思路更加清晰,对我帮助非常大。
(3)后面我将通过2个例题全面阐述Foundation框架方面的知识,希望对ios开发的初学者有所帮助,敬请继续关注!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: