继承和类设计
==========================
继承和类设计
==========================
oc是一门面向对象的语言,面向对象编程有三大特性:封装、继承、多态
一.封装
【注】封装就是把某些解决一些问题的代码进行模块化,对外部暴露一个接口。我们都称为封装了一个方法;
【优点】
1.封装可以增强代码的复用度。
2.封装可以有效提高开发速度。
二.继承
子类拥有了父类的方法和属性的情况,我们称为继承;
A:B(读作:A类继承B类,也就A类拥有了B类的方法和属性)
【优点】
1.不用书写任何代码,就可以实现某一些功能;
2.可以不用修改父类的方法,对父类进行扩展;
三.多态
多态:类的多种形态
【总结】
多态的方式,可以有效的缩减代码量
多态多用在具有相同方法名的类中,外部在调用方法之前,并不清楚需要调用哪个类中方法;
四.类别(category)(扩展)
有一些第三方类、咱们程序员以前自己写的一些类,要用到的时候突然发现如果这个类能有一个xxx方法那就好了,但是又不允许对第三分类或者以前写的类进行修改。那么怎么办?就可以用到类别(扩展)
1.认识category
#import <Foundation/Foundation.h>
#import "dog.h"
// 使用类别的时候需要先包含头文件
// 类别一般单独放到一个类中进行扩展
#import "NSString+print.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSString* str = @"hello world hahah";
[str show];
NSLog(@"%@",str);
dog* mydog = [[dog alloc]init];
[mydog test];
}
return 0;
}
#import <Foundation/Foundation.h>
// NSString 就是要扩展的类 ()小括号内部就是你自己写的类名
@interface NSString (print)
//这个位置写需要扩展出来的方法
-(void)show; // 打印当前对象
// 可以扩展成员方法,但是不可以扩展成员变量
// 【注】类别就是为了扩展第三方类或者其它以前自己写的类方法,但是又不可以对第三方和之前写的方法进行修改,而存在的;
@end
#import "NSString+print.h"
@implementation NSString (print)
-(void)show
{
//打印当前对象
NSLog(@"%@",self);
}
@end
#import <Foundation/Foundation.h>
@interface dog : NSObject
-(void)test;
@end
#import "dog.h"
#import "NSString+print.h"
@implementation dog
-(void)test
{
NSString* str = @"我是dog class";
[str show];
}
@end
继承和类别的区别
1.类别是对类的方法进行扩展,不能添加成员变量。但是继承可以在原有父类的基础上对方法和成员变量进行扩展。
2.类别只能添加新的方法,不能修改删除原类的方法,但是继承可以增加和修改;
3.类别不提倡对原有方法进行重载,但是继承可以。
4.类别可以被继承,如果父类中实现了类别,子类也就存在此类别。
2.认识extension(扩展)也是类别的一种;
【知识扩展】
1.声明在.h中的方法或者属性变量,外界可以访问;
2.声明在.m中的属性变量或者方法,只是当前类可以访问;