Men的博客

欢迎光临!

0%

继承和类别

继承

什么是继承,继承如何实现?

总结: 继承的语法 @interface Student : Person
作用- 子类拥有父类的属性和方法
语法: 定义了Student, 继承与Person
Student子类, Person父类
学生信息管理系统
人 Person人 属性: 名字,性别,年龄
学生 Student学生 属性: 名字,性别,年龄, 学号, OC成绩

继承后的重写

子类拥有父类所有的方法
如果子类中重写了从父类继承下来的方法
优先执行重写后的方法

继承后的权限

总结: 子类能访问父类公有和受保护的属性和方法
不能访问私有的, 想要访问, 使用父类
getter和setter间接访问
只写@property,没有写对应的实例变量
权限是私有的private

父类指针和子类指针如何相互指向?

(赋值兼容原则)
总结: 父类指针可以指向父类对象, 还有子类对象
子类指针只能指向它自己的对象, 不能指向父类对象
NSString —-> NSMutableString
NSArray —–> NSMutableArray

init方法 super和self, NSObject

NSObject是oc中所有类的根类
提供了重要的方法alloc init
self 在方法中表示当前对象,类方法中表示当前类
super 一般用super执行父类的方法

isKindClassOf和isMemberClassOf

判断一个对象是不是某个类的实例?
总结:
isKindOfClass 判断一个对象是否是这个类及其子类的实例
isMemberOfClass 判断一个对象是不是某个类的实例

类别Category

什么是类别?, 类别的作用

需求: 有些类, 缺少我们需要一些方法
但是我没有类的源代码, 添加一个方法
实例: NSMutableString 添加一个reverse方法
类别是OC语法, 能给系统或自定义的类添加一个方法

类别基本使用(语法)

使用类别, 需要包含类别头文件
#import “NSMutableString+Extension.h”
@interface NSMutableString (Extension)
需要添加的方法的声明
-(void)reverseString
{
//逆序当前字符串 self
NSMutableString *mstr = [[NSMutableString alloc] init];
for (long i=self.length-1; i>=0; i–) {
[mstr appendFormat:@”%C”,[self characterAtIndex:i]];
}
self.string = mstr;
}
[self setString mstr]
self.string=mstr;
// NSLog(@”%p”,self);
// 当前对象指针。

类别的限制(使用注意事项)

(1) 系统中已经有function方法, 添加类别,类别中也有function方法
总结: 类别中得方法如果在类中已经存在
优先使用类别中得方法
(2) 类别能给一个类添加方法? 能不能添加实例变量?
总结: 类别中不能添加实例变量

类别和继承有什么区别? 在什么情况下使用类别,或继承

总结: 一般情况下
有一个类, 缺少一些方法, 扩展这个类, 使用类别添加方法
@intereface Dog (Ext)
有一个类, 缺少方法, 缺少属性, 使用继承, 在子类中添加方法和属性
@intereface Dog : NSObject