分類,擴充套件和繼承的區別

2021-07-22 01:58:08 字數 1224 閱讀 1339

1:分類和擴充套件的區別

<1>分類:宣告的時候使用格式中括號必須要有分類名稱,建立完成後有兩個資料夾(person+action.h person+action.m檔案)

@inte***ce 類名 (分類名稱)

/* 方法宣告

*/@end

@implementation 類名(分類名稱)

/* 方法實現

*/@end

擴充套件:宣告的時候使用格式中括號沒有東西,建立完成後只有person_action方法

inte***ce person ()

/*方法宣告或者成員變數

*/@end

<2>:分類只能擴充方法,不能擴充套件屬性和成員變數;

如果分類中宣告了乙個屬性,那麼分類只會生成這個屬性的set、get方法宣告,也就是不會有實現,所以如果使用該屬性,程式將會崩潰

擴充套件中宣告的方法和成員變數是私有的,只有在擴充套件類中能呼叫,外部的類無法呼叫

例如:在分類中設定成員變數:

#import "person.h"

@inte***ce person (action)

@property(copy,nonatomic)nsstring *testcategory;

@end

在類別中設定成員變數:

#import "person.h"

@inte***ce person ()//注意括號中沒有類名稱,這是與分類category的不同之處

//為person類新增成員變數

@property(copy,nonatomic)nsstring *testextension;

@end

在person類中初始化方法中給兩個成員變數賦值,執行,顯示程式崩潰:

從程式崩潰的原因可以知道分類是不能宣告成員變數,設定屬性的;

2:分類和繼承的區別

<1>分類增加的這些方法會成為類型別的一部分;

繼承增加的方法不會成為父類的一部分

<2>分類增加的方法如果與類的方法同名,會覆蓋原類的方法,因為category的優先順序更高

繼承中子類也會覆蓋父類的方法

iOS 繼承 分類和類擴充套件

繼承是指乙個新類擁有被繼承類 父類 的全部屬性和方法。例如,只有繼承nsobject,才有建立物件的能力。nsobject是大部分類的基類 根類,root class 當a類繼承b類,a類就擁有b類中所有成員變數 屬性 和方法。這也是繼承的主要目的。使用場景 當我們可以說通b是乙個a時,就可以使用b...

IOS分類和擴充套件的解析及其區別

object c語言的動態性,不但體現在繼承和重寫上,還有乙個非常強大的功能就是分類和擴充套件,比如乙個類的方法不能滿足我現在的要求,而且我還不想修改原類的結構,這是分類就有很大的作用,有時我們想修改原來也不可能,不如系統提供的類,像nsstring,uiviewcontroller等,我們要是想給...

繼承和擴充套件

odoo 提供了三種不同的機制以模組化的方式來擴充套件模組 類繼承 class inheritance 用來新增功能 新類相容現有的檢視 儲存在同一張表中 原型繼承 prototype inhertiance 用於拷貝賦值功能 現有檢視忽略新類 儲存在不同的表中 委託繼承 delegation in...