黑马程序员——继承

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

继承:类B继承类A,会把类A的所有属性给类B

例:设计类
@interface Dog :NSObject
{
 年龄、体重
}
年龄的set、get方法
体重的set、get方法
@end

@implementation Dog

年龄的set、get方法的实现
体重的set、get方法的实现

@end

@interface Cat :NSObject
{
 年龄、体重
}
年龄的set、get方法
体重的set、get方法
@end

@implementation Cat

年龄的set、get方法的实现
体重的set、get方法的实现

@end

分析:猫和狗的声明和实现代码完全一样,只不过类名不同而已,这时,就要考虑用继承

#inport<Foundation/Foundation.h>

//声明
@interface Animal :NSObject
{
 int _age;
 double _weight;
} 
-(void)setAge:(int)age;
-(int)age;

-(void)setWeight:(double)weight;
-(double)weight;

@end

@implementation Animal
//方法的实现

-(void)setAge:(int)age
{
 _age = age;
}
-(int)age
{
 return age;
}

-(void)setWeight:(double)weight
{
 _weight = weight;
}
-(double)weight
{
 return weight;
}
@end

//:Animal 代表:继承了Animal,相当于拥有Animal的所有成员变量和方法
//Animal称为Dog、Cat的父类,Dog、Cat称为Animal的子类

@interface Dog :Animal
@end

@implementation Dog
@end


@interface Cat :Animal
@end

@implementation Cat
@end

int main()
{
 Dog * d = [Dog new];
 [d setAge:10];
 NSLog(@"age=%d",[d age]);
 return 0;
}

输出结果:age=10

注:[Dog wnew]这是一个类调用,所以类是一个new方法,是NSObject中的类方法。
越往下继承,拥有的成员变量和方法越多,Animal只拥有NSObject的成员变量和方法,
而Dog、Cat不仅拥有NSObject的成员变量和方法,还拥有Animal的成员变量和方法。

继承的好处:
 1>抽取重复代码
 2>建立了类之间的关系
 3>子类拥有父类中的所有成员变量和方法

注意:基本上所有类的根类是NSObject

例2

#inport<Foundation/Foundation.h>
//声明
@interface Person :NSObject
{
 int _age;
}
-(void)setAge:(int)age;
-(int)age;
-(void)run;
@end

@implementation Person
//方法的实现
-(void)run
{
 NSLog(@"Person--跑");
}
-(void)setAge:(int)age
{
 _age = age;
}
-(int)age
{
 return _age;
}
@end

@interface Student :NSObject
{
 int _no;
}

@end

@implementation Student
//方法的实现
-(void)run
{
 NSLog(@"Student--跑");
}
@end

int main()
{
 Student *s = [Student new];
 [s run];
 return 0;
 
}


输出结果:Student--跑

调用[s run]时,先在Student中找run方法,有,输出,若Student中无-(void)run方法,则从Student的父类Person中找,
则会输出Person--跑,若无,再从NSObject中找。

1.不允许子类和父类有相同的成员变量
2.子类重新实现父类中的某方法称为重写
例如:例2中的run方法
重写会覆盖父类以前的做法
3.就像每个对象里都有一个isa指针指向生成它的类一样,每个类里都有一个superclass指针,指向它的父类
4.父类的声明必须在子类的前边
5.调用某个方法时,优先去当前类中找,找不到再去父类中找
6.其实,每个对象中都有isa指针的原因是:他们的共同父类NSObject里定义了成员变量
@interface NSObject<NSObject>
{
 class isa;
}
@end
7.若在父类中Person中声明和实现+(void)test
    {
       NSLog(@"111");
    }
在子类中Student中有+(void)test2
    {
      [self test];
    }
则main()中有
{
 [Student test2];
}

先在Student类中找test类方法,调[self test]相当于[Student test],在Student中找test类方法,
找不到,再到父类Person中找test类方法,有,所以最终输出:111

 


 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值