面向對象的一些基本概念

来源:http://www.cnblogs.com/qianLL/archive/2016/03/02/5235102.html
-Advertisement-
Play Games

類與實例 對象是一個自包含的實體,用一組可識別特性和行為來標識 簡稱OOP 類就是具有相同的屬性和功能的對象的抽象的集合 ‘class’是便是定義類的關鍵字 (OC中用@interface 類名:繼承類 @end) 第一,類名稱首字母記者要大寫。多個單詞則各個首字母大寫,第二,對外的方法需要用‘pu


 

類與實例

對象是一個自包含的實體,用一組可識別特性和行為來標識 簡稱OOP   類就是具有相同的屬性和功能的對象的抽象的集合   ‘class’是便是定義類的關鍵字 (OC中用@interface 類名:繼承類 @end) 第一,類名稱首字母記者要大寫。多個單詞則各個首字母大寫,第二,對外的方法需要用‘public’修飾符(oc中用@public)     實例,就是一個真實的對象,實例化就是創建對象的過程,使用new關鍵字來創建(oc中可以用new,也可以使用[[類名 alloc] init]實例化對象)

構造方法

Map
構造方法,又叫構造函數,其實就是對類進行初始化。構造方法與類同名,無返回值,也不需要void,在new時候調用   所以類都要構造方法,如果你不編碼則系統預設生成空得構造方法,若你有定義的構造的方法,那麼預設的構造方法就會失效了(就好像OC中的init方法和便利初始化函數)

方法重載

Map
方法重載提供了創建同名的多個方法的能力,但是這些方法需要使用不同的參數類型 註意,方法重載時,兩個方法名必須相同,但是參數類型還活著個數必須要有所不同,否則重載就沒什麼意義了 方法重載可在不改變原方法的基礎上,增加功能就可以了

繼承

Map
對象的繼承代表了一種’is-a’的關係,如果兩個對象A和B,可以描述為’B’是’A’,則表明B可以繼承A   繼承者還可以理解為時對被繼承者的特殊化,因為他除了具備被繼承者的特性外,還具備自己獨有的個性   繼承定義了類如何相互關聯,共用特性。繼承的工作方式是,定義父類和子類,或者叫做基類和派生類,其中子類繼承父類的所有特性。子類不但繼承了父類的所有特性,還可以繼承父類所有的特性,還可以定義新的特性   如果子類繼承於父類,第一,子類擁有父類的非private的屬性和功能,第二,子類具有自己的屬性和功能,即子類可以擴展父類沒有的屬性和功能,第三,子類還可以以自己的方式實現父類的功能(方法的重寫)protected表示繼承時,子類可以對基類有完全訪問權   子類從它的父類中繼承的成員有方法,域,屬性,事件,索引指示器,但是對於構造方法,有一些特殊,他不能被繼承,只能被調用,對於調用父類的成員,可以用base關鍵字 (OC中super)   不用繼承的話,如果要修改功能,就必須在索引重覆的方法中修改,代碼越多,出錯的可能性就越大,二繼承的優點是,繼承使得所有子類公共的部分都放在了父類,使得代碼得到了共用,這久避免了重覆,另外,繼承課使得修改或擴展而來的實現較為容易   繼承是有缺點的,那就是父類類變,則子類不得不變,繼承會破壞包裝,父類實現的細節暴露給子類    繼承顯然是一種類與類之間強耦合的關係   當兩個類之間具有‘’is-a’的關係時,就可以考慮繼承了

封裝

Map
每個對象都包含它能進行操作所需要的所有信息,這個特性稱為封裝,因此對象不必依賴其他的對象來完成自己的操作,這樣方法和屬性包裝在類中,通過類的實例來實現   封裝的好處 1.良好的封裝能夠減少耦合 2.類內部的實現可以自由的修改 3.類具有清晰的對外介面

介面

Map
介面是把隱式公共方法和屬性組合起來,以封裝特定功能的一個集合,一旦類實現了介面,類就可以支持介面所指定的所有屬性和成員。聲明介面在語法上與聲明抽象類完全相同,但是不允許提供介面中的任何成員的執行方式。所以介面不能實例化,不能有構造方法和欄位;不能有修飾符,比如public,private等,不能聲明虛擬的或靜態的等,還要實現介面的類就必須要實現介面中的所有的方法和屬性     一個類可以支持多個介面,多個類也可以支持相同的介面,介面的命名,前面要加一個大寫的字母’I’ 介面用interface聲明,而不是class,介面名稱前面要加’I’,介面中的方法或者屬性前面不能有修飾符,方法沒有方法體   抽象類可以給出一些成員的實現,介面卻不包含成員的實現,抽象類的抽象成員可被子類部分實現,介面的成員需要實現類完全實現,一個類只能堅持一個抽象類,但可以實現多個介面等等 1.類是對對象的抽象:抽象類是對壘的抽象:介面是對行為的抽象 2.如果行為跨越不同類的對象,可使用介面;對於一些相似的類的對象,用繼承抽象類   實現介面和繼承抽象類並不衝突  

抽象類

Map
C#允許把類和方法聲明為abstract 即抽象類和抽象方法   1.抽象類不能實例化 2.抽象方法必須是被子類方法重寫的方法 3.如果類中包含抽象方法,那麼類就必須定義為抽象類,無論是否還包含其他的一般方法 4.抽象類擁有儘可能多的共同代碼,擁有儘可能少得數據[J&DP] 5.抽象類通常代表一個抽象概念,他提供一個繼承的出發點,當設計一個新的抽象類時,一定是用來繼承的,所以,在一個以繼承關係形成的等級結構裡面,樹葉節點應當是具體類,而樹枝節點應當是抽象類  
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 設置微信支付需要的4個參數APPID APPSECRET MCHID KEY在哪裡找呢 其中APPID APPSECRET為公眾號的appid和appsecret,在微信公眾平臺後臺查看 開發》基本配置》開發者ID MCHID和KEY為微信支付商戶號和API密鑰,在微信支付商戶平臺後臺查看 MCHI
  • http://blog.csdn.net/bluishglc/article/details/47909593?utm_source=tuicool&utm_medium=referral 實際工作中用到網路知識的機會並不多,雖然以前學習過,但是許久不用自然也就生疏了。最近拿到幾台雲上的虛擬機,需要
  • MyEclipse 2016基於Eclipse Mars 1 (4.5.1),除了在Eclipse基礎上做了更新之外,我們還更新了集成在MyEclipse上的第三方工具,比如STS, m2e, BIRT, Webtools, eGit等等。 Mars集成對Java的一些核心進行了改進,比如編譯器的...
  • PDO是一個“資料庫訪問抽象層”,作用是統一各種資料庫的訪問介面,與mysql和mysqli的函數庫相比,PDO讓跨資料庫的使用更具有親和力;與ADODB和MDB2相比,PDO更高效。目前而言,實現“資料庫抽象層”任重而道遠,使用PDO這樣的“資料庫訪問抽象層”是一個不錯的選擇。 PDO中包含三個預
  • 假期本想要嘗試做一些不同的事,卻一直荒廢,偶然看到了幕課,頓時後悔,再借我一個假期,一定在幕課上認真學習。比自己看書效率高很多啊! 於是反正無聊,用了一個晚上瞭解了一下python(僅限於瞭解),總想做點啥有意思的,想來想去還是和抓包聯繫上了。 鑒於Wireshark我是真不怎麼會用,這次抓包用的軟
  • 嘗試過myeclipse10環境下,線上安裝findbugs,插件包是能下載到指定目錄下,可是由於版本問題,findbugs插件是不能使用的。所以才有了下麵的離線安裝
  • 本文來源:https://www.dataquest.io/mission/132/data-visualization-and-exploration 本文數據來源https://github.com/fivethirtyeight/data/blob/master/college-majors/...
  • Java有Maven, Node.js有npm, ROR有gem, 這些語言的程式員在開心地使用包管理工具加速開發效率時,PHPer們還在複製粘貼的黑暗中。PHP在Composer之前,包管理的歷史不堪迴首。 在相當長的一段時間內,如果應用依賴於第三方庫,PHPer需要拷貝這些庫的源代碼, 或者通過
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...