當前位置: 首頁 / 技術分享 / 正文
好程序員Java培訓今日分享實用的Java教程之對象的轉型

2019-12-11

JAVAEE Java培訓 好程序員

好程序員Java培訓今日分享實用的Java教程之對象的轉型

> 體現:

>

> 1. 父類的引用可以指向子類的對象

> 2. 接口的引用可以指向實現類的對象

 

> 轉型:

>

> 1. 向上轉型

>    1. 由子類類型轉型為父類類型,或者由實現類類型轉型為接口類型

>    2. 向上轉型一定會成功,是一個隱式轉換

>    3. 向上轉型后的對象,將只能訪問父類或者接口中的成員

> 2. 向下轉型

>    1. 由父類類型轉型為子類類型,或者由接口類型轉型為實現類類型

>    2. 向下轉型可能會失敗,是一個顯式轉換

>    3. 向下轉型后的對象,將可以訪問子類或者實現類中特有的成員

 

####instanceof關鍵字

 

> 1. 針對于向下轉型的。

>

>    1. 如果向下轉型不成功,會怎樣?

>

>       1. 會有一個異常 ClassCastException

>

>    2. 如何避免這種情況?

>

>       1. 在向下轉型之前,我們先判斷一下這個對象是不是要轉型的類型

>

>       2. 怎么判斷?

>

>          1. 關鍵字 **instanceof**

>

>             ```java

>             Animal animal = new Dog();

>             if (animal instanceof Dog) {

>                 // 說明animal的確是一個Dog

>             }

>             ```

 

> 如果一個類中重寫了父類的某一個方法。此時:

>

> 1. 如果用這個類的對象來調用這個方法,最終執行的是子類的實現。

> 2. 如果用向上轉型后的對象來調用這個方法,執行的依然是子類的實現。

>    1. 因為向上轉型后的對象,歸根到底還是子類對象。

 

#### 抽象類與抽象方法

 

> 抽象:**abstract**

>

>  

>

> 抽象類:

>

> 用關鍵字abstract修飾的類,就是抽象類

>

> 抽象方法:

>

> 用關鍵字abstract修飾的方法,就是抽象方法

 

> 特點:

>

> 抽象方法:

>

>  1. 抽象方法使用abstract來修飾,只有聲明,沒有實現。

>

>     ```java

>     public abstract void bark();

>     ```

>

> 2. 抽象方法,只能夠寫在抽象類中。

>

> 抽象類

>

> 1. 抽象類使用abstract來修飾,抽象類不能實例化對象。

> 2. 抽象類中是可以寫非靜態的成員的,這時候這些非靜態成員是可以繼承給子類的。

> 3. 抽象類中是可以包含構造方法的。

>

> 結合抽象類和抽象方法:

>

> 1. 非抽象子類在繼承一個抽象父類的同時,要實現父類中所有的抽象方法。

 

> 注意事項:

>

> **final**關鍵字

>

> 1. 抽象類可以用final來修飾嗎?

>    1. 不能!因為final表示這個類無法被繼承。但是對于抽象類來說,如果無法被繼承,則這個抽象類沒有任何意義。

> 2. 抽象方法可以用final修飾嗎?

>    1. 不能!因為final修飾的方法無法被重寫。但是抽象方法又只能寫在抽象類中。如果一個抽象方法用final來修飾了,此時這個方法將無法被非抽象子類重寫,那這個子類就會有問題。

 

> 抽象類和抽象方法的實用場景:

>

> 可以用抽象類和抽象方法來實現一些簡單規則的制定。

>

> 例如:所有的快遞公司都必須要會xxxxxKFC、麥當勞、

>

> 如果僅僅用抽象類和抽象方法來進行規則指定、行為約束:

>

> 弊端:因為Java是單繼承的語言,如果一個類為了遵循某一種規范,而去繼承一個抽象類,此時這個類將無法再繼承其他類。

>

>為了解決這樣的問題,我么可以使用接口進行行為約束,規范代碼。

 

#### 接口

 

> 關鍵字:**interface**

>

>  

>

> 語法:

>

>和類是比較像的,但是他不是類

>

> ```java

> [訪問權限修飾符] interface 接口名字 {

>     // 接口中的成員

> }

> ```

>

>  1. 訪問權限修飾符:和類一樣,只能有 public 和默認的default權限。

>  2. 接口不是類,不能實例化對象。

>  3. 接口,暫時和類寫成平級的關系。

>  4. 接口名字是一個標識符,遵循大駝峰命名法

 

> 接口中成員的定義:

>

> 1. 屬性:接口中的屬性,默認的修飾符是 **public static final**

> 2. 構造方法:接口中不能寫構造方法

> 3. 方法:

>    1. 接口中的方法都是抽象方法

>    2. 接口中的方法訪問權限修飾符都是public

 

> 接口是需要被類來實現的。

>

> 實現接口關鍵字: **implements**

>

> 讓類實現接口:

>

> ```java

> public class Shunfeng extends Company implements Express {

>     

> }

> ```

>

> 1. 一個非抽象類在實現接口后,需要實現接口中所有的抽象方法。

>

> 2. 一個類在繼承自一個父類后,還可以再去實現接口。

>

>    1. 如果同時有父類和接口,那么繼承父類在前,實現接口在后

>

> 3. 一個類可以實現多個接口

>

>    1. 如果一個類實現的多個接口中有相同的方法,這個方法在實現類中只需要實現一次即可。

>

> 4. 接口之間是有繼承關系的,而且接口之間的繼承是多繼承。

>

>    ```java

>    public interface GrilFriend extends HouseKeeping, Takecare {

>    

>    }

>    ```

好程序員開班動態

More+
  • HTML5大前端 <高端班>

    開班時間:2020-02-17(北京)

    預約報名

    開班時間:2020-03-02(深圳)

    預約報名
  • 大數據+人工智能 <好程序員嚴選班>

    開班時間:2019-12-23(北京)

    開班盛況
  • 大數據+人工智能 <好程序員班>

    開班時間:2020-02-24(杭州)

    預約報名

    開班時間:2020-02-17(北京)

    預約報名
  • JavaEE分布式開發 <高端班>

    開班時間:2020-03-09(北京)

    預約報名
  • Python全棧+人工智能 <高端班>

    開班時間:2019-07-22(北京)

    開班盛況
  • 云計算開發 <高端班>

    開班時間:2020-02-24(北京)

    預約報名
在線咨詢
免費試聽
入學教程
立即報名

Copyright 2007-2019 北京千鋒互聯科技有限公司 .All Right 京ICP備12003911號-5 京公安網11010802011455號

我要久久综合色久久,亚洲伊人色综网