面向對象的一些基本概念

来源: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
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...
  • 目錄前言PostgreSql安裝測試額外Nuget安裝Person.cs模擬運行Navicate連postgresql解決方案Garnet為什麼要選擇Garnet而不是RedisRedis不再開源Windows版的Redis是由微軟維護的Windows Redis版本老舊,後續可能不再更新Garne ...
  • C#TMS系統代碼-聯表報表學習 領導被裁了之後很快就有人上任了,幾乎是無縫銜接,很難讓我不想到這早就決定好了。我的職責沒有任何變化。感受下來這個系統封裝程度很高,我只要會調用方法就行。這個系統交付之後不會有太多問題,更多應該是做小需求,有大的開發任務應該也是第二期的事,嗯?怎麼感覺我變成運維了?而 ...
  • 我在隨筆《EAV模型(實體-屬性-值)的設計和低代碼的處理方案(1)》中介紹了一些基本的EAV模型設計知識和基於Winform場景下低代碼(或者說無代碼)的一些實現思路,在本篇隨筆中,我們來分析一下這種針對通用業務,且只需定義就能構建業務模塊存儲和界面的解決方案,其中的數據查詢處理的操作。 ...
  • 對某個遠程伺服器啟用和設置NTP服務(Windows系統) 打開註冊表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 將 Enabled 的值設置為 1,這將啟用NTP伺服器功 ...
  • title: Django信號與擴展:深入理解與實踐 date: 2024/5/15 22:40:52 updated: 2024/5/15 22:40:52 categories: 後端開發 tags: Django 信號 松耦合 觀察者 擴展 安全 性能 第一部分:Django信號基礎 Djan ...
  • 使用xadmin2遇到的問題&解決 環境配置: 使用的模塊版本: 關聯的包 Django 3.2.15 mysqlclient 2.2.4 xadmin 2.0.1 django-crispy-forms >= 1.6.0 django-import-export >= 0.5.1 django-r ...
  • 今天我打算整點兒不一樣的內容,通過之前學習的TransformerMap和LazyMap鏈,想搞點不一樣的,所以我關註了另外一條鏈DefaultedMap鏈,主要調用鏈為: 調用鏈詳細描述: ObjectInputStream.readObject() DefaultedMap.readObject ...
  • 後端應用級開發者該如何擁抱 AI GC?就是在這樣的一個大的浪潮下,我們的傳統的應用級開發者。我們該如何選擇職業或者是如何去快速轉型,跟上這樣的一個行業的一個浪潮? 0 AI金字塔模型 越往上它的整個難度就是職業機會也好,或者說是整個的這個運作也好,它的難度會越大,然後越往下機會就會越多,所以這是一 ...
  • @Autowired是Spring框架提供的註解,@Resource是Java EE 5規範提供的註解。 @Autowired預設按照類型自動裝配,而@Resource預設按照名稱自動裝配。 @Autowired支持@Qualifier註解來指定裝配哪一個具有相同類型的bean,而@Resourc... ...