- 继承和派生
继承是指一个新类拥有全部被继承类的属性和方法,通过继承产生新类的过程也称作派生。
派生: 由子类创建的方法或者属性。子类除了继承之外的属性和方法。派生的目的是扩展、修改父类的功能。
继承机制使得新类不仅有自己特有的属性和方法,而且有被继承类的全部属性和方法。
说明:
1)基类的私有属性能被继承,不能被使用。
2)OC中的继承是单继承:也就是说一个类只能一个父类,不能继承多个父类
2.实例变量的修饰符
详细说明如下:
1)@public (公开的)在有对象的前提下,任何地方都可以直接访问。
2)@protected (受保护的)只能在当前类和子类的对象方法中访问 (默认访问权限)
3)@private (私有的)只能在当前类的对象方法中才能直接访问
4)@package (框架级别的)作用域介于私有和公开之间,只要处于同一个框架中就可以直接通 过变量名访问
3.方法的重写
重写就是从父类继承的方法,不适用于子类时,可以直接声明父类的同名方法,并定义。 不用考虑父类中,方法已存在的问题。 重写后,子类可以通过super调用父类的方法。
4.多态
多态:父类的指针可以指向子类的对象,而子类的指针不能指向父类的对象。
多态常与isKindOfClass、isMemberOfClass结合起来用
多态的实现是通过子类重写父类方法,建立一个父类的对象用子类初始化。父类对象调用方法时将实现子类中重写的父类方法。
#import <Foundation/Foundation.h>
@interface Animal : NSObject
- (void)barkWith:(NSString *)animalName;
@end
#import "Animal.h"
@implementation Animal
-(void) barkWith:(NSString *)animalName {
NSLog(@"父类 %@ is barking",animalName);
}
@end
#import "Animal.h"
@interface Bull : Animal
@end
#import <Foundation/Foundation.h>
#import "Animal.h"
#import "Bull.h"
#import "Sheep.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// 多态: 父类的指针可以指向子类的对象,而子类的指针不能指向父类的对象
// 多态常与isKindOfClass、isMemberOfClass结合起来用
Animal * a = [[Bull alloc]init];
[a barkWith:@"哞哞"];
// 错误用法
// Bull * b = [[Animal alloc]init];
// [b barkWith:@"小牛"];
}
return 0;
}