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

来源:互联网 发布:七政四余择日软件 编辑:程序博客网 时间:2024/06/05 06:20

------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修饰的实例变量和私有方法就不能被子类调用。

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


0 0