继承与派生
1.1继承:也是两个类之间的一种关系
1.2是父类与子类之间的一种关系,需要满足“is a”的条件
1.3子类继承父类之后,将父类中的所有属性和方法直接在子类中复用
1.4派生:在子类中添加自己的属性与方法

1.6重写:在子类中对父类继承过来的方法重新定义函数体
1.7隐藏:子类重写父类的方法后,用子类的对象调用该方法时,优先调用子类重写的方法
1.8 private与protected(访问方法)
1.8.1private:作用域仅在所定义的类中(私有的)
1.8.2protected:作用域在所定义类及其子类中(保护的)
TRAnimal.h
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface TRAnimal : NSObject
{
int _a;//保护的作用域在所定义类及其子类中
@private
int _b;//作用域仅在所定义的类中
}
@property NSString *name;
@property int age;
-(id)initWithName:(NSString *)name andAge:(int)age;//带参初始化
+(id)animalWithName:(NSString *)name angAge:(int)age;//带参工厂
-(NSString *)eat;
-(NSString *)sleep;
@end
NS_ASSUME_NONNULL_END
TRAnimal.m
#import "TRAnimal.h"
@implementation TRAnimal
-(id)initWithName:(NSString *)name andAge:(int)age
{
self = [super init];
if (self)
{
self.name = name;
self.age = age;
}
return self;
}
+(id)animalWithName:(NSString *)name angAge:(int)age
{
TRAnimal *a = [[TRAnimal alloc]initWithName:name andAge:age];
return a;
}
-(NSString *)eat
{
return [NSString stringWithFormat:@"动物%@吃",self.name];
}
-(NSString *)sleep
{
return [NSString stringWithFormat:@"动物%@睡",self.name];
}
-(NSString *)description
{
return [NSString stringWithFormat:@"名字:%@\n年龄:%d",self.name,self.age];
}
@end
TRDog.h(子类)
@interface TRDog : TRAnimal
-(NSString *)watchHome;
@property int weight;
-(id)initWithName:(NSString *)name andAge:(int)age andWeight:(int)weight;
@end
TRDog.m
@implementation TRDog
-(NSString *)watchHome
{
return [NSString stringWithFormat:@"狗狗%@正在看家", self.name];
}
-(id)initWithName:(NSString *)name andAge:(int)age andWeight:(int)weight
{
self = [super initWithName:name andAge:age];
if(self)
{
self.weight = weight;
}
return self;
}
-(NSString *)eat
{
_a = 10;//作用域在所定义类及其子类中(保护的)
//_b = 20;作用域仅在所定义的类中(私有的)
NSString *str = [super eat];
str = [str stringByAppendingFormat:@"\n狗狗%@正在啃骨头",self.name];
return str;
}
ViewController.m
#import "ViewController.h"
#import "TRDog.h"
#import "TRCat.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UILabel *outputLabel;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
TRDog * dog = [[TRDog alloc]init];
dog.name = @"旺财";
dog.age = 2;
self.outputLabel.text = [dog eat];
TRCat *cat = [[TRCat alloc] initWithName:@"加菲猫" andAge:1];
self.outputLabel.text = [cat sleep];
self.outputLabel.text = [dog watchHome];
self.outputLabel.text = [cat catchMouse];
TRDog *dog1 = [[TRDog alloc] initWithName:@"阿黄" andAge:3 andWeight:5];
self.outputLabel.text = [dog1 eat];
}
网友评论