(七)黑马程序员——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
类的声明-->这部分详细知识请见我的第5篇博文《黑马程序员--oc基础之类方法与对象方法的使用比较》
@property关键字
@property是编译器指令,告诉编译器声明属性的访问器(setter/getter)的方法,可免去我们手工书写get和sset方法的繁琐。与传统set和get方法比较,请见我的第6篇博文《黑马程序员--oc基础之封装》。
1.2.2
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几乎一样,这里就不赘述了!
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
3.2.2
学习心得
(1)这是我的第8篇博文,也是oc基础的最后一篇博文,本文主要通过一个例题将@property关键字、点语法、继承与派生等基础知识综合起来,并对相关知识点进行详细阐述,至此,我感觉自己的oc基础知识更加扎实了。
(2)每一次我都会花至少3个小时写一篇博文,每每有灵感,每一篇博文都会经过很多次修改,不仅是自己有一种追求完美的癖好,更是每一次写博文,都是对我的知识库的全面复习,让自己的思路更加清晰,对我帮助非常大。
(3)后面我将通过2个例题全面阐述Foundation框架方面的知识,希望对ios开发的初学者有所帮助,敬请继续关注!
例题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开发的初学者有所帮助,敬请继续关注!
相关文章推荐
- 黑马程序员-description的重写
- 黑马程序员-NSArray的使用
- 黑马程序员-OC的继承
- 黑马程序员-OC类的声明和实现,以及OC的优势
- (六)黑马程序员——oc基础之封装
- 全面解析《嵌入式程序员应该知道的16个问题》
- 新手程序媛要怎么做
- 京东面试题,N只熊分苹果
- 程序员的自黑
- 从小学到高中,一个程序猿的独白
- 关于数组面试小题
- 两道面试题:2012年10月9号阿里巴巴笔试
- 单链表常见的面试题,及应用
- Android面试题(一)(笔记)
- 2015北京面试记录
- 黑马程序员——java学习日记八
- C#程序员经常用到的10个实用代码片段
- 黑马程序员——java学习日记七
- verilog面试题
- 如何成为一名合格的程序员