OC学习总结2 派生、重写和多态

  1. 继承和派生
    继承是指一个新类拥有全部被继承类的属性和方法,通过继承产生新类的过程也称作派生。
    派生: 由子类创建的方法或者属性。子类除了继承之外的属性和方法。派生的目的是扩展、修改父类的功能。
    继承机制使得新类不仅有自己特有的属性和方法,而且有被继承类的全部属性和方法。
    说明:
    1)基类的私有属性能被继承,不能被使用。
    2)OC中的继承是单继承:也就是说一个类只能一个父类,不能继承多个父类

2.实例变量的修饰符
详细说明如下:
1)@public (公开的)在有对象的前提下,任何地方都可以直接访问。
2)@protected (受保护的)只能在当前类和子类的对象方法中访问 (默认访问权限)
3)@private (私有的)只能在当前类的对象方法中才能直接访问
4)@package (框架级别的)作用域介于私有和公开之间,只要处于同一个框架中就可以直接通 过变量名访问

3.方法的重写
重写就是从父类继承的方法,不适用于子类时,可以直接声明父类的同名方法,并定义。 不用考虑父类中,方法已存在的问题。 重写后,子类可以通过super调用父类的方法。

4.多态
多态:父类的指针可以指向子类的对象,而子类的指针不能指向父类的对象。
多态常与isKindOfClass、isMemberOfClass结合起来用

多态的实现是通过子类重写父类方法,建立一个父类的对象用子类初始化。父类对象调用方法时将实现子类中重写的父类方法。

#import 

@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 
#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;
}

你可能感兴趣的:(OC学习总结2 派生、重写和多态)