1. 好程序員-千鋒教育旗下高端IT職業教育品牌

      400-811-9990
      我的賬戶
      好程序員

      專注高端IT職業培訓

      親愛的猿猿,歡迎!

      已有賬號,請

      如尚未注冊?

      [JavaEE] 好程序員Java培訓分享實用教程系列之對象的轉型

      [復制鏈接]
      218 0
      admin 發表于 2019-12-11 14:46:24 | 只看該作者 |閱讀模式 打印 上一主題 下一主題
      好程序員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 {
      >   
      >    }
      >    ```

      精彩內容,一鍵分享給更多人!
      收藏
      收藏0
      轉播
      轉播
      分享
      淘帖0
      支持
      支持0
      反對
      反對0
      回復

      使用道具 舉報

      您需要登錄后才可以回帖

      本版積分規則

      關注我們
      好程序員
      千鋒好程序員

      北京校區(總部):北京市海淀區寶盛北里西區28號中關村智誠科創大廈

      深圳西部硅谷校區:深圳市寶安區寶安大道5010號深圳西部硅谷B座A區605-619

      杭州龍馳智慧谷校區:浙江省杭州市下沙經濟技術開發區元成路199號龍馳智慧谷B座7層

      鄭州校區:鄭州市二七區航海中路60號海為科技園C區10層、12層

      Copyright 2007-2019 北京千鋒互聯科技有限公司 .All Right

      京ICP備12003911號-5 京公安網11010802011455號

      請您保持通訊暢通1對1咨詢馬上開啟

      人人艹人人