iOS開發-OC語言 (七)繼承、多態、類別

来源:http://www.cnblogs.com/fcug/archive/2017/01/15/6286490.html
-Advertisement-
Play Games

繼承、多態、類別 學習目標 1、繼承的含義 2、父類子類的別稱 3、欄位和消息的繼承 4、重寫和重寫消息的調用 5、多態 6、類別(Category) 1.需要理解的知識 面向對象的三個基本特征: 1、封裝 2、繼承 3、多態 1、繼承(單繼承): 父類(超類)和子類的關係。 繼承的兩個類,存在父子 ...


 繼承、多態、類別

 

學習目標

1、繼承的含義

2、父類子類的別稱

3、欄位和消息的繼承

4、重寫和重寫消息的調用

5、多態

6、類別(Category)

 

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

 

1.需要理解的知識

 

面向對象的三個基本特征:   1、封裝 2、繼承 3、多態

 

 

1、繼承(單繼承):    父類(超類)和子類的關係。

       繼承的兩個類,存在父子關係。

 

     OC支持單繼承,不支持多繼承。

      

 

1.1 生活中的繼承

                 人(父類) ——  男人/女人(子類)

                男人/女人(父類) ———  學生(子類)

               學生(父類)——— 大學生(子類)

             大學生(父類) ———  大四學生(子類)

             大四學生(父類)——— 小明(子類)

 

 

【註】

(1)把繼承又叫做派生

父類的屬性(成員變數(不包括私有))和方法,子類可以直接獲取,這個過程就叫做繼承

子類在父類的基礎上,創建了自己獨有的成員變數和方法,這個過程就叫做派生。

 

繼承和派生其實是說的繼承概念的不同的側重點。

      (2)提示:每個類中都有一個super class指針,該指針指向自己的父類。對象中有一個isa指針,該指針指向調用該對象的類。

 

 

    繼承的好處:

  1)創建大量的相似類的時候,可以節省工作量。抽取出了重覆的代碼

  2)使用框架中的類,或已經寫好的類,繼承該類,生成一個派生類,比原類更好用。

註意:NSString、NSArray、NSDictionary都是不能夠繼承的。

       3)建立了類和類之間的聯繫

 

      繼承的缺點:

            耦合性太強

 

 NSString不能被繼承的原因:

           NSString這個類在設計的時候採用了“抽象工廠”模式,內部是個class cluster,一個類簇。也就是說NSString是個“工廠類”,然後它在外層提供了很多方法介面,但是這些方法的實現是由具體的內部類來實現的。當使用NSString生成一個對象時,初始化方法會判斷哪個“自己內部的類”最適合生成這個對象,然後這個“工廠”就會生成這個具體的類對象返回給你。這種又外層類提供統一抽象的介面,然後具體實現讓隱藏的,具體的內部類來實現。

 

 

 

  1.2 代碼中的繼承

<1>繼承的基本語法

 

(1)@interface 子類名:父類名

@end

 

 

(2)繼承之後

子類可以使用父類的所有共有方法  

子類可以獲得父類非私有的成員變數

 

 

 

<2>重寫

1.子類從父類繼承的方法, 有時候不適合子類,子類可以重寫這個方法

2.重寫就是重新實現一遍父類的方法(方法名一樣 ,實現內容不同)

3.子類重寫父類方法之後,子類對象最終執行的是子類重寫之後的方法

 

 

 

1.3 繼承在記憶體中的體現

子類繼承父類之後。 子類對象的構成:

1) 父類的欄位和方法

2) 子類自己獨有的欄位和方法

 

 

 

【繼承的作用】

1、快速創建多個形似的類

2、對類進行擴展

3、自定義一些系統的一些功能控制項(UI裡面用的比較多)

 

 

【重寫】有時候從父類繼承到的方法,並不適合子類,子類可以重寫這個方法。

【重寫是多態的一種,多態就是同一個聲明不同的實現】

【註】很多時候,子類的方法只需要在父類的同名方法中增補些內容。可以通過關鍵字【supper】調用父類的方法,再增添子類獨有的內容。

 

        1.4 關鍵字super

Super關鍵字,在子類中重寫方法時,可以讓調用者跳過這一層而調用父類中的方法。

 

 

作用:

(1)直接調用父類中的某一個方法

(2)Super處在對象方法中,那麼就會調用父類的對象方法;super處於類方法中,那麼就會調用父類的類方法。

 

 

使用場景:子類在重寫父類方法時,想要保留父類的一些行為。

 

 

         1.5 繼承和組合

繼承的適用場合:

(1)當兩個類擁有相同的屬性和方法時,就可以將相同的屬性和方法抽取到一個父類中。

(2)當A類完全擁有B類中的部分屬性和方法時,可以考慮讓B類繼承A類(考慮),在這種情況下,也可以考慮使用組合。

繼承:###是xxx,如狗是動物,可以讓狗繼承動物類

組合###擁有xxx,如學生有書,可以讓書這個類作為學生類的屬性

 

 

 

 

 

 

———————————————————

2、多態與類的消息機制 

【多態】重寫、虛函數 

//其實多態就是指,同一個介面不同的實現

同一個方法,不同的實現,稱為多態。重寫是多態的一種。

 

 

        

         方法重載也是多態的一種。方法重載是指在一個類中定義多個同名的方法,但要求每個方法具有不同的參數的類型或參數的個數。

  【註意】OC沒有嚴格的方法重載。

 

 

 

 

【虛方法】

            虛函數定義:調用方法時,不看指針,看對象,對象的地址指向什麼對象,就調用什麼方法,稱為虛方法。

 

            虛方法的好處:可以描述不同事物被相同事件觸發,產生不同的響應(結果)

 

 

1.響應消息,不看指針,看對象。

2.父類的指針,可以指向子類的對象(子類的對象賦值給父類)。

 

 

 

【註】

虛方法體現了不同事物被同一事件觸發,有不同的響應。

給不同對象發送相同的消息,反應不一樣。

 

 

實現多態(滿足三個條件)

1、有繼承關係

2、有重寫

3、父類的指針指向了子類的對象

 

 

 

 

【註】NSString NSArray NSDictionary NSNumber 都是【工廠類】或者是抽象類,不能被繼承,即使被繼承,也不能使用父類的方法。

 

———————————————————

5、類別/類目   category

 

          類別的寫法:

 

          @interface 類名 (類別名)

 

     定義方法

 

@end

 

 

 

        如何給一個類擴展方法?

 

1、繼承

2、類別

 

 

 

 

 

  註:一旦使用類別給已有的類增補方法,那麼這個類的對象就可以使用這個方法

 

 

 

<2>.類別功能:

  1. 可以給已有/ 系統原生的類增加方法,不能添加全局變數和屬性。

  2.可以對類的方法進行分類管理,可以將類的實現分散到多個不同文件或多個不同框架中。

 

 

 

<3>使用類別需要註意的問題

1.類別中不能添加成員變數

2.使用類別增加的方法須導入類別頭文件

3.父類類別中的方法,子類也可以用

 

 

 

<4>類擴展

當不想對外公開一些類的方法時,我們可以使用類擴展

 

1.類擴展的基本語法

在.m文件中

@interface Person()//沒有名字

  - (void)song;

@end

 

@implementation Person

- (void)song{

 

}

@end

註: 類擴展中的聲明和實現都放在.m文件中

 

 

 

    2.類擴展的功能

1.可以實現私有方法

2.可以聲明成員變數 ,成員變數是私有的,子類和其他類訪問不了。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這裡是放代碼的地方嗎? ...
  • 設計師很多時候會有一像素線的需求,怎麼去實現有下麵幾種方法。 一、 Image 1. 資源圖片 找設計師要個圖片,用UIImageView 或者 CALayer的方式顯示出來 2. CoreGraphics繪製 用CoreCraphics的方式畫一個 UIImage,然後用1的方法展示出來 此類方法 ...
  • 此開源框架官網地址:https://github.com/astuetz/PagerSlidingTabStrip 可以理解為配合ViewPager使用的互動式頁面指示器控制項。 話不多說,先上效果圖: 為了演示其中的pstsIndicatorHeight與pstsUnderlineHeight 的區 ...
  • 前兩天群里有兄弟在吐槽,做遠程推送的時候:老闆要求APP桌面圖標的右上角顯示紅色未讀數字(數字角標)要精準,有多少未讀通知就顯示數字幾;但是後臺的弟兄在發送推送通知的時候,每次的角標是1,然後要移動端這邊自己去把這個未讀數字去累加,然後顯示在APP上;並且後臺非常固執的認為這個累加未讀消息數量是在移 ...
  • 開發小程式所需的基本技能 關於小程式的介紹和使用場景這裡不作介紹,這個系列的文章會一步一步地帶領大家快速地學習和掌握小程式的開發。 關於還沒有接觸過小程式的開發者來說,最關心的問題無非就是,開發小程式,我需要掌握哪些技能? 從我學習小程式的經驗中得出,開發小程式的基本要求: 如果你是一名已經工作1年 ...
  • 演示環境:Mac OSX10.12.2 Xcode8 先瞄一眼最終成果~ 1.JDK,DBMS(演示環境使用Mysql) 2.創建sonar資料庫和用戶 3. "下載sonar" 演示環境使用v6.1,下載後解壓到 /usr/local/sonar/ 4. "下載sonar runner" :演示環 ...
  • 目錄操作和文件管理 學習目標 1.理解單例 2.掌握NSFileManager類常用的文件管理操 3.掌握NSFileHandle類常用的文件數據操作 4.瞭解NSData類的常用操作 5.掌握Plist文件讀寫 —————————————————————— 通常程式在運行中或者程式結束之後,需要保 ...
  • 記憶體管理 對於這篇呢,其實現在都是ARC模式,正常狀態下基本不用我們去手動釋放記憶體,所以如果不是要面試呀、裝逼或者扎實功底的,就先別看了或者瞭解下即可,因為像面試時,有些面試官想看你的基礎時,就有些人會問,現在工作基本不會用到。 學習目標 1. 掌握記憶體管理的原理 2. 掌握手動記憶體管理 1.需要理 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...