天天看點

[Java] 面向對象的三個特征與含義

版權聲明:請尊重個人勞動成果,轉載注明出處,謝謝!

對象  是類的一個執行個體(對象不是找個女朋友),有狀态和行為。例如,一條狗是一個對象,它的狀态有:顔色、名字、品種;行為有:搖尾巴、叫、吃等。 類  是一個模闆,它描述一類對象的行為和狀态。

1 . 封裝性

  将對象的狀态資訊盡可能的隐藏在對象内部,隻保留有限的接口和方法與外界進行互動,進而避免了外界對對象内部屬性的破壞。

java支援4種不同的通路權限。  

預設的,也稱為default,在同一包内可見,不使用任何修飾符。 

私有的,以private修飾符指定,在同一類内可見。 

共有的,以public修飾符指定,對所有類可見。 

受保護的,以protected修飾符指定,對同一包内的類和所有子類可見。

2. 繼承

   java通過繼承建立分等級層次的類,可以了解為一個對象從另一個對象擷取屬性的過程。 

類的繼承是單一繼承,也就是說,一個子類隻能擁有一個父類 

下面的做法是不合法的:

  但是我們可以用多繼承接口來實作, 如: 

  繼承中最常使用的兩個關鍵字是extends(用于基本類和抽象類)和implements(用于接口)。 

注意:子類擁有父類所有的成員變量,但對于父類private的成員變量卻沒有通路權限,這保障了父類的封裝性。 

下面是使用關鍵字extends實作繼承。 

  通過使用關鍵字extends,子類可以繼承父類所有的方法和屬性,但是無法使用 private(私有) 的方法和屬性。 

我們通過使用instanceof 操作符能夠确定一個對象是另一個對象的一個分類。

結果如下:

implements關鍵字使用在類繼承接口的情況下, 這種情況不能使用關鍵字extends。

可以使用 instanceof 運算符來檢驗mammal和dog對象是否是animal類的一個執行個體。

運作結果如下:

3.多态

  多态是同一個行為具有多個不同表現形式或形态的能力。 

多态性是對象多種表現形式的展現 

比如:我到寵物店說”請給我一隻寵物”,服務員給我小貓、小狗或者蜥蜴都可以,我們就說”寵物”這個對象就具備多态性。 

因為deer類具有多重繼承,是以它具有多态性。 

通路一個對象的唯一方法就是通過引用型變量 (編譯時變量)。 

引用型變量隻能有一種類型,一旦被聲明,引用型變量的類型就不能被改變了。 

引用型變量不僅能夠被重置為其他對象,前提是這些對象沒有被聲明為final。還可以引用和它類型相同的或者相相容的對象。它可以聲明為類類型或者接口類型。

所有的引用型變量d,a,v,o都指向堆中相同的deer對象。

我們來看下面這個例子:

運作結果:

說明:bird類繼承animal并重寫了其方法。 

因為animal b = new bird(),編譯時變量和運作時變量不一樣,是以多态發生了。可以從最後的運作結果中看出,調用了父類的成員變量name和子類重寫後的兩個方法。 

上面繼承說了,子類可以調用父類所有非private的方法和屬性。因為name是一個string的對象,與方法不同,對象的域不具有多态性。通過引用變量來通路其包含的執行個體變量時,系統總是視圖通路它編譯時類型所定義的變量,而不是他運作時類型所定義的變量。

  那麼問題來了,如果我們把animal的成員變量換成private,那會不會去調用bird類的成員變量name來列印輸出呢? 

[Java] 面向對象的三個特征與含義

也就是說 系統通路的始終是去通路編譯時類型所定義的變量。 

  重寫定義:子類對父類的允許通路的方法的實作過程進行重新編寫!傳回值和形參都不能改變。即外殼不變,核心重寫!