继承和类设计

Posted 甘林梦的开发之路

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了继承和类设计相关的知识,希望对你有一定的参考价值。

==========================

继承和类设计

==========================

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中的属性变量或者方法,只是当前类可以访问;

 

以上是关于继承和类设计的主要内容,如果未能解决你的问题,请参考以下文章

Java编程设计---继承

设计原则

面向对象的三个基本特征 和 五种设计原则

JDK设计模式之——装饰者模式(适配器模式)

连载08:软件体系设计新方向:数学抽象设计模式系统架构与方案设计(简化版)(袁晓河著)

设计模式分类