Objective-C语言_面向对象(继承)

main.m

#import <Foundation/Foundation.h>
#import "Father.h"
#import "NotSon.h"
#import "Son.h"
#import "SonA.h"
#import "SonB.h"

int main(int argc,const char * argv[]) {
    @autoreleasepool{
    
#pragma mark -----------继承-------------------
    /*
     继承:继承是避免冗余,提高代码的可重用和可维护性的有效手段
     
     (书P54)
     继承的传递性:直接父类、间接父类
     
     继承需要符合的关系: is-a 
        子类和父类都需要满足 is-a的关系,才存在继承关系。
     继承概念下的 is-a关系是个单向的关系
     
     子类具有父类的属性和行为,以及自身特殊的属性和行为
     要记住 X is-a Y隐喻着X可以做出任何Y可以做出的事情,而且还有可能会做出更多的事情
     */
    
    /*
     继承的特点
     1.使用继承可以实现代码的重用,减少代码冗余
     2.OC中一个类可以继承另一个类,被继承的类称为父类 或者超类(基类),继承的类称为子类 或者派生类(孩子类)
     3.子类可以直接"拥有"父类所有允许子类继承的属性和方法
     4.子类可以改变父类中已有的方法,执行不同的代码实现
     5.OC中只允许单一继承,因为多重继承会有称为"致命方块"的问题(P57)
     */
    
    Father *father = [[Fatheralloc]init];
    //点语法的本质是setter和 getter
    father.name = @"Jack";
    [father sayHello];
    [father charge];
    
    //如果这样写代码就会十分的冗余了,并且这样写没有遵循面向对象的一个重要原则:write once,only once
    NotSon *notSon = [[NotSonalloc]init];
    notSon.name = @"notSon";
    [notSon sayHello];
    [notSon charge];
    
    Son *son = [[Sonalloc]init];
    [son charge];
    
    son.name = @"Rick";
    son.homeAddress = @"GZ";
    [son sayHello];
    [son race];
    
#pragma mark -------------NSObject中常用的方法及其功能----------
    
    /*
     NSObject中常用的方法及其功能
     1.方法: +(id)alloc
     功能:返回一个分配好内存的对象
     说明:已经分配号内存的对象的实例变量会被初始化成默认值
     
     2.方法: +(init)
     功能:对已经分配内存大的实例变量初始化(相当于便利初始化函数)
     不一定要默认的便利初始化函数,也可以自己写
     说明:常见形式
     -(id)init
     {
        if(self = [super init])
        {
            //初始化
        }
        return self ;
     }
     
     3.方法:+(id)new
     功能:同时调用了 alloc和 init
     
     4.方法: -(Class)class
            +(Class)class
     功能:返回当前对象所属类
     
     5.方法:-(Class)superclass
            +(Class)superclass
     功能:返回当前对象的父类
     
     6.方法: -(BOOL)isKindOfClass:(Class)aClass
        功能:判定receiver是否为Class的实例
        说明:判断某个实例是否属于某个类或者子类
     
     7.方法:-(BOOL)isMemberOfClass:(Class)aClass
        功能:判断receiver是否为Class的实例
        说明:只能判断某个实例是否属于某个类,不能判断是否属于某个父类
     
     8.+(BOOL)isSubclassOfClass:(Class)aClass
        功能:判断是否为aClass的子类
        说明:判断是否某个类的子类
     
     9.-(BOOL)respondsToSelector:(SEL)aSelector
        功能:判断receiver是否响应某个消息,不包括类方法
     
     10.+(BOOL)InstancesRespondToSelector:(SEL)aSelector
        功能:判断类的对象是否响应某消息
     
     11.-(BOOL)conformsToProtocol:(Protocol *)aProtocol
        功能:判断是否实现某协议
     
     12.-(id)retain
        功能:对象引用计数+1
     
     13.-(oneway void)release
     功能:对象引用计数 -1
     
     14.-(id)autorelease
        功能:对象引用计数-1,且向autoreleasepool发送消息
     
     15.-(NSUInteger)retainCount
        功能:返回当前引用计数
     
     16.-(void)perfromSelector:(SEL)aSelector
                withObject:(id)anArgument
                afterDelay:(NSTiemInvterval)delay;
        功能:隔指定时间之后进行方法调用
     
     */
    
    
    }
    return 0;
}

Father.h

#import <Foundation/Foundation.h>

@interface Father : NSObject

@property (nonatomic,strong)NSString *name;

@property (nonatomic,assign)NSInteger age ;

@property (nonatomic,strong)NSString *hobby ;

-(void)sayHello ;

-(void)charge ;

@end

Father.m

 
 
<pre name="code" class="objc">#import "Father.h"

@implementation Father

-(void)sayHello
{
    NSLog(@"Hello everybody,my name is %@",self.name);
}

-(void)charge
{
    NSLog(@"随便刷,刷刷刷!!!");
}

@end


 
 

NotSon.h

#import <Foundation/Foundation.h>

@interface NotSon : NSObject
@property (nonatomic,strong)NSString *name;

@property (nonatomic,assign)NSInteger age ;

@property (nonatomic,strong)NSString *hobby ;

-(void)sayHello ;

-(void)charge ;
@end
 
 

NotSon.m

#import "NotSon.h"

@implementation NotSon

-(void)sayHello
{
    NSLog(@"Hello everybody,my name is %@",self.name);
}

-(void)charge
{
    NSLog(@"随便刷,刷刷刷!!!");
}

@end

SonA.h

#import "Father.h"

@interface SonA : Father

@end


SonA.m
#import "SonA.h"

@implementation SonA

-(void)sayHello
{
    [super sayHello];
    NSLog(@"I am SonA");
}

@end
 
 

SonB.h

#import "Father.h"

@interface SonB : Father

@end


SonB.m

@implementation SonB

-(void)sayHello
{
    [super sayHello];
    NSLog(@"I am SonB");
}

@end


Son.h

#import "Father.h"

//@interface 类名:父类名 ,在OC中,使用冒号表示一个类继承了另一个类。冒号的含义是扩展,意味着子类除了继承了父类的属性和方法外,还可以扩展出自己的特殊属性和方法(一般情况下,我们继承于NSObject类,可以获取NSObject类中的大量有用的特性)
@interface Son : Father

@property (nonatomic,strong)NSString *homeAddress ;

//自己的方法
-(void)race ;

@end

Son.m

#import "Son.h"

@implementation Son

//重写父类的charge方法
-(void)charge
{
    /*
     重写继承中的方法
     特点:
        1.发生在父类和子类之间
        2.方法名相同,参数列表相同,返回类型相同
     */
    NSLog(@"拿老爸的卡出来刷一下);
}
@end


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值