一、封裝: 我們可以把世界上任何乙個東西都看作為乙個物件,那麼我們這裡以人為例,乙個人就肯定是乙個物件了。 那麼封裝是什麼呢? 封裝就是這個人要完成一件事情,他所需要的任何工具都帶在了自己的身上,所需要的技術也都裝在了自己的腦子裡了。不需要借助於別人的力量就能完成這一件事情。這個有什麼好處呢?好處就是如果我要吩咐這個人去完成一件事情,我不需要知道他是怎麼完成的,也不需要協助他去完成,只要知道結果,他完成了就ok了。至於他是先幹什麼後幹什麼我不干涉,這有助於他更快更好的幹好這件事情,我自己也省事。
1、訪問許可權(可見性)
public:(隨處可見)所有包、類匯入後均可見 公共的
protected:(合法繼承)本身、不同包的子類自身,
private:(自私自利)只在本類中可見
本類同包類
public
protected
default
private
不同包類
public
protected
default
子類子類
public
protected(子類中,且子類自身使用)
其他類public
2、(1)、屬性-->private(私有屬性,公開方法,不用預設)
(2)、方法--> public protected
書面的解釋如下: 每個物件都包含它能進行操作所需要的所有資訊,因此物件不必依賴其它的物件來完成自己的操作。
二、繼承: 還以為人為例,我們每個人都會有一些共同的特徵,都要做一些相同的事情。比如:人都有乙個腦袋,二只胳膊,二條腳,這是共同的特徵。都要吃飯,喝水,這是都要做的相同的事情。那麼如果我們現在要宣告很多個人,每個人都會有這些特徵,那我不是要寫很多重複的**?所以我們可以先建乙個人的父類,這個父類不代表乙個具體的人,只是乙個擁有人所有共同特性的虛擬的人。下次我 們要例項化乙個具體的人的時候,只需要將這個人繼承上面這個「虛擬的人」,那麼他就擁有了人的所有共同特性。這樣,這些重複的**我們就可以不寫了。
當然,繼承的目標不僅僅是為了節省**,還有實現後面的多型的功能。初學者只需要了解繼承可以少寫很多**就好了,餘下的需要在專案中慢慢理解。
書面的解釋如下: 物件的繼承代表一種"is-a"的關係,假如兩個物件a和b,如果可以描述為"b就是a",那麼則表示b可以繼承自a。
注意: 如果a繼承了b,那麼a不僅擁有了b除私有的特性外的所有特性,a還可以擁有自己獨特的特性。比如上面人的這個例子,乙個繼承了 「虛擬的人」,那麼他除了有乙個腦袋,二只胳膊,二條腳,要吃飯喝水外,他可能還會程式設計。程式設計就是他獨特的特性了,因為不是每個人都會程式設計的。
1、(1)、延續:父類存在,子類沒有重寫但可以使用;
(2)、新增:父類沒有,子類新增加的
(3)、重寫:父類子類都存在,但是弗雷德不滿足要,子類對其進行從新定義;
2、 例項化:
(1)、先父類後子類,先靜態後成員;
例項化的時候先呼叫父類的靜態構造快,在呼叫父類的構造方法,然後子類的構造塊,在呼叫子類的構造方法;
(2)、預設呼叫父類空構造;
3、重寫 override
(1)、重寫與過載:
重寫:繼承的子類中,方法簽名相同( 方法名+形參個數 型別 順序 )
過載:同乙個類 方法名相同 ,形參個數 型別 順序 不同
(2)、重寫規則:在子類中簽名與父類中相同,在合理範圍內提高子類可見性;
a、返回型別:基本型別和void必須相同;引用型別要<=父類的返回類
b、異常:
c、可見性:要大於或等於父類中被重寫的方法
三、多型: 有多型之前必須要有繼承,只有多個類同時繼承了同乙個類,才有多型這樣的說法。
還是以人為例子,前面我們有說過人都要做「吃飯」這樣乙個相同的事情。「吃飯」這個事情,體現到類中就是方法了。因為是人都是要做的,所以我們在「虛擬的人」中寫好了這個方法,但每個人都有不同的吃飯方法,有用筷的也有用叉的,有要吃公尺飯的也有要吃麵食的。所以如果我們要描述不同人的吃飯的過程,就要把這個過程放到具體的子類中去了,因為每個人都不一樣嘛。同樣乙個方法,子類都有不同的實現方式,這個就是多型了,多型有助於程式的靈活性。
注意:子類中如果重寫了父類的方法(多型),那麼父類中的這個方法將不會再呼叫。
1.好處:
簡化了程式設計介面。它容許在類和類之間重用一些習慣性的命名,而不用 為每乙個新加的函式命名乙個新名字。
簡化**
如果函式/方法引數中使用的是父類的型別,可以傳入父類、子類的物件
侷限性:父類型別的變數,不能直接呼叫子類特有的方法。必須強轉為子類型別的變數,才能直接呼叫子類特有的方法
2、編譯時多型:其實就是過載,是對非虛成員來說的,系統在編譯時,根據不同簽名來決定實現何種操作。
3、執行時多型:也就是重寫,是通過虛成員實現的,指直到系統執行時,才根據實際情況決定實現何種操作。
對與第一種情況很容易就能理解,不同簽名就有不同的實現
而第二種情況是在繼承的基礎上實現的,子類繼承基類時,通過對虛成員的重寫,然後利用基類引用子類物件,那麼不同的子類物件實現相應的不同操作。
這樣的好處是顯而易見的,利用基類型別定義一次,然後給它傳入不同的子類物件,然後實現不同的操作,提高了效率。
C 物件導向三大特性
封裝就是將成員變數和成員方法等集合在乙個個的類中,通過給類及類中的成員變數 屬性和方法設定不同的訪問修飾符 public protected internal protected internal private 來控制它們的作用範圍,使用時呼叫它的方法,或者給它的變數賦值。封裝的意義在於保護或者防...
C 物件導向的三大特性
一 封裝 我們可以把世界上任何乙個東西都看作為乙個物件,那麼我們這裡以人為例,乙個人就肯定是乙個物件了。那麼封裝是什麼呢?封裝就是這個人要完成一件事情,他所需要的任何工具都帶在了自己的身上,所需要的技術也都裝在了自己的腦子裡了。不需要借助於別人的力量就能完成這一件事情。這個有什麼好處呢?好處就是如果...
物件導向三大特性
什麼是物件導向呢?之前我們做一件事的時候,常常是確定,先幹什麼,然後怎麼做,最後可以完事了。其實我們不妨這麼想一下,我們做事的時候是可以這樣的 這件事中涉及了什麼物件角色?如果我要把這件事做成那麼就需要物件之間是如何協作的?第二種方法,就是今天說的物件導向的方法了,好處正在慢慢體會。今天我想說的物件...