黑马程序员——ios学习笔记 OC 继承

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

 继承

继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增

加新的数据或新的功能。一般都是使用“:”来实现继承。

① 实例变量的继承

在父类中声明的实例变量可以在子类中使用,子类中就可以不再对该变量进

行声明,这样子类继承的父类的实例变量就变成了自己类中的实例变量。子类不仅可以继承父类的实例变量,还可以拥有自己特有的实例变量。

② 方法的继承

除了实例变量可以继承外,方法也是可以被继承的。父类中定义的方法在子

类中也可以直接被访问,不需要在子类中重新定义。子类不仅可以继承父类的方法,还可以有自己独特的方法。


Person.h

 <pre name="code" class="html">#import <Foundation/Foundation.h>
@interface Person : NSObject{ //person类的申明继承NSObject @protected NSString *_nation;} #pragma mark - 属性#pragma mark 姓名@property (nonatomic,copy) NSString *name;#pragma mark 年龄@property (nonatomic,assign) int age;#pragma mark 籍贯@property (nonatomic,copy) NSString *nation;//带有参数的构造函数-(id)initWithName:(NSString *)name andAge:(int )age;//通过静态方法返回一个对象+(id)personWithName:(NSString *)name andAge:(int )age; @end

 

 

Person.m

#import "Person.h"
 
@implementation Person        //person类的实现

//带有参数的构造函数
-(id)initWithName:(NSString *)name andAge:(int)age{
    if(self=[super init]){ //super代表父类
        self.name=name;
        self.age=age;
    }
    return self;
}

//通过静态方法返回一个对象
+(id)personWithName:(NSString *)name andAge:(int)age{
    Person *p=[[Person alloc]initWithName:name andAge:age];
    return p;
}
 
// 重写description
-(NSString *)description{
return [NSStringstringWithFormat:@"{name:%@,age:%i}" ,self.name,self.age];
}
 
@end


Student.h

#import "Person.h"
 
@interface Student : Person            //student类的申明,继承与person类

@property (nonatomic,assign) float score;
 
//带有参数的构造函数
-(id)initWithName:(NSString *)name andAge:(int )age andScore:(float)score;

//通过静态方法返回一个对象
+(id)studentWithName:(NSString *)name andAge:(int )age andScore:(float)score;
 
@end


Student.m

#import "Student.h"           //student类的实现
 
@implementation Student

// 带有参数的构造函数
-(id)initWithName:(NSString *)name andAge:(int )age andScore:(float)score{
    if(self=[super initWithName:name andAge:age]){
        self.score=score;
    }
    return self;
}

+(id)studentWithName:(NSString *)name andAge:(int)age andScore:(float)score{//</span><span style="font-family: SimSun; font-size: 18px;">通过静态方法返回一个对象</span><span style="font-family:SimSun;font-size:18px;">
    Student *s=[[Student alloc]initWithName:name andAge: ageandScore: score];
    return s;
}
 
-(NSString *)description{  //方法的重写
    return [NSString stringWithFormat:@"{name:%@,age:%i,nation:%@,scroe:%.2f}",self.name,self.age,self->_nation,self.score]; //注意这里访问了父类的属性和方法
}
 
@end


main.m

#import <Foundation/Foundation.h>
#import "Student.h"
 
int main(int argc, const char * argv[]) {
    
    Person *p=[Person personWithName:@"Kenshin" andAge:28];
    NSLog(@"p=%@",p);
    
    Student *s=[Student studentWithName:@"Kaoru" andAge:27 andScore:100];
    s.nation=@"henan";
    NSLog(@"s=%@",s);
    
    
    return 0;
}


总结:

继承是面向对象三大特征(继承、封装、多态)之一。

子类可以继承父类的所有实例变量与方法,但不一定都能使用,如用@private修饰的实例变量和私有方法就不能被子类调用。

私有方法不用申明,只需要实现,其只在本文件中有效。


Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值