——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
继承在面向对象的语言中有着广泛而重要的应用,是最基本的知识之一。
下面定义两个类:Animal, Pig. 其中Pig继承自Animal类。
则pig继承了Animal的所有属性和方法,不需要在Pig类中再次定义相同的属性和方法,但Pig可以重写父类Animal的方法。
Animal.h中的代码:
#import <Foundation/Foundation.h>
@interface Animal : NSObject
{
//下面实例变量定义为protected,也是默认的类型
// @protected表示只有当前类及子类可以访问
// @public 表示在任何地方,只要声明类或其子类都可以访问
// @private 表示除了当前类,其它任何类都不可以访问,但子类可以继承。
@protected
int _age;
int _speed;
NSString * _name;
}
-(void)run:(int)speed;
-(void)bark:(NSString *)name withAge:(int)age;
//set 方法
-(void)setAge:(int)age;
-(void)setSpeed:(int)speed;
-(void)setName:(NSString *)name;
//get 方法
-(int)age;
-(int)speed;
-(NSString *)name;
@end
Animal.m中的代码:
#import "Animal.h"
@implementation Animal
-(void)run:(int)speed{
NSLog(@"animal is running, speed is %d.",speed);
}
-(void)bark:(NSString *)name withAge:(int)age{
NSLog(@"an animal is bark, its name is %@, age is %d.",name,age);
}
//set 方法
-(void)setAge:(int)age{
_age = age;
}
-(void)setSpeed:(int)speed{
_speed = speed;
}
-(void)setName:(NSString *)name{
_name = name;
}
//get 方法
-(int)age{
return _age;
}
-(int)speed{
return _speed;
}
-(NSString *)name{
return _name;
}
@end
pig.h中没有声明新的属性或方法,pig.m中代码:
#import "Pig.h"
@implementation Pig
-(void)run:(int)speed{
NSLog(@"the cute pig is running, pig's speed is %d.",speed);
}
-(void)bark:(NSString *)name withAge:(int)age{
NSLog(@"the fat pig is barking, Pig's name is %@, age is %d.",name,age);
}
@end
主函数main()代码:
#import <Foundation/Foundation.h>
#import "Animal.h"
#import "Pig.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Animal *ani = [Animal new];
Pig *pig = [[Pig alloc]init];
ani.age = 2;
ani.speed = 80;
ani.name = @"hinani";
pig.age = 3;
pig.speed = 90;
pig.name = @"bajie";
[ani run:ani.speed];
[ani bark:ani.name withAge:ani.age];
[pig run:pig.speed];
[pig bark:pig.name withAge:pig.age];
}
return 0;
}
输出结果如下: