iOS学习笔记1- OC的类的定义和继承

iOS学习:OC类定义与继承及多态概念
这篇笔记探讨了Objective-C中的类定义和继承。内容包括成员变量的访问修饰符,指出父类的私有变量无法在子类中直接使用,但若方法中涉及私有变量,子类可以间接访问。还介绍了多态的概念,即通过父类引用调用子类重写的方法,实现不同形态。此外,讨论了方法重写,但指出Objective-C不支持方法重载。


1. 关于成员变量访问修饰符

@interface MyClass : NSObject{
    
    // 默认-受保护
    
    // public, 类内类外都可以访问,并且可以继承
    @public
    int _classInt;
    // 私有,  类内可以使用, 类外无法调用, 并且不可以被继承
    @private
    // 受保护, 类内可以使用, 类外无法调用, 并且可以继承
    @protected
    NSString* _classStr;
    // 框架, - 在框架内相当于 protected, 在框架外相当于 private
    @package
}



2. 关于类的继承

<pre name="code" class="objc">假设有一个MySubClass 继承My Class:


#import <Foundation/Foundation.h>


// NSObject - 基类
@interface MyClass : NSObject{
    // 啥也不写, 默认受保护
    int _classInt;
    
    
    @private
    
    NSString* _classStr;
}

@property(nonatomic, strong) NSString* className;

- (void)report;
@end

假设有一个MySubClass 继承My Class:
// 引用父类头文件
#import "MyClass.h"
// interface时冒号代表继承关系
@interface MySubClass : MyClass

- (void)show;
@end


举个例子:

1. 父类中的私有变量我们无法继承使用

2. 如果父类的方法中使用了私有变量, 而我们的子类继承了父类的这个方法,那私有变量的操作和访问我们是可以看到的,但是我们不可以在子类中直接调用私有变量

3. 如果父类的方法没有写声明,则子类无法继承父类中对应的方法(可以理解为找不到相应的接口)

- (void)show{
    _classInt = 30; 
   // _classStr = @"MySubClassStr"; // 访问不了
    NSLog(@"show - %d", _classInt);    
}


3. 多态

多态的概念:简答的讲,就是假设有一个父类,多个子类继承这个父类,并且改写父类中的某个方法,这样就相当于每个子类有多种形态

方法重写:继承一个方法,实习方式不一样

方法重载(OC并不支持):相同函数名,但是不同的变量


例子:

假设我有一个父类叫printer

#import <Foundation/Foundation.h>

@interface Printer : NSObject

- (void)print;

@end


同时又有两个子类继承于它:

#import "Printer.h"

@interface ColorPrinter : Printer

@end

#import "Printer.h"

@interface Printer : Printer

@end


在子类的实现中,可以具体实现自己的print

// 方法重写
-(void)print{
    //同时调用父类的print
    [super print];
    NSLog(@"彩色打印机");
}
同时,在子类中可以调用父类的 print, 用关键词super 代表父类


dynamic dispatch:

Printer* printer = [[ColorPrinter alloc] init];
[printer print];

新建了一个ColorPrinter 却把它赋给一个Printer指针,这里Printer 是static type, 而ColorPrinter 是dynamic type,编译器会找到对应的print, 并正确调用





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值