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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值