好程序員Java實用教程系列之對象的轉型

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

體現:

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

轉型:

  1. 向上轉型
    1. 由子類類型轉型爲父類類型,或者由實現類類型轉型爲接口類型
    2. 向上轉型一定會成功,是一個隱式轉換
    3. 向上轉型後的對象,將只能訪問父類或者接口中的成員
  2. 向下轉型
    1. 由父類類型轉型爲子類類型,或者由接口類型轉型爲實現類類型
    2. 向下轉型可能會失敗,是一個顯式轉換
    3. 向下轉型後的對象,將可以訪問子類或者實現類中特有的成員

instanceof關鍵字

  1. 針對於向下轉型的。

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

      1. 會有一個異常 ClassCastException
    2. 如何避免這種情況?

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

      2. 怎麼判斷?

        1. 關鍵字 instanceof
        Animal animal = new Dog();
        if (animal instanceof Dog) {
            // 說明animal的確是一個Dog
        }

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

  1. 如果用這個類的對象來調用這個方法,最終執行的是子類的實現。
  2. 如果用向上轉型後的對象來調用這個方法,執行的依然是子類的實現。
    1. 因爲向上轉型後的對象,歸根到底還是子類對象。

抽象類與抽象方法

抽象:abstract

抽象類:

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

抽象方法:

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

特點:

抽象方法:

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

    public abstract void bark();
    1. 抽象方法,只能夠寫在抽象類中。

抽象類:

  1. 抽象類使用abstract來修飾,抽象類不能實例化對象。
  2. 抽象類中是可以寫非靜態的成員的,這時候這些非靜態成員是可以繼承給子類的。
  3. 抽象類中是可以包含構造方法的。

結合抽象類和抽象方法:

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

注意事項:

final關鍵字

  1. 抽象類可以用final來修飾嗎?
    1. 不能!因爲final表示這個類無法被繼承。但是對於抽象類來說,如果無法被繼承,則這個抽象類沒有任何意義。
  2. 抽象方法可以用final修飾嗎?
    1. 不能!因爲final修飾的方法無法被重寫。但是抽象方法又只能寫在抽象類中。如果一個抽象方法用final來修飾了,此時這個方法將無法被非抽象子類重寫,那這個子類就會有問題。

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

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

​ 例如:所有的快遞公司都必須要會xxxxx。KFC、麥當勞、

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

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

​ 爲了解決這樣的問題,我麼可以使用接口進行行爲約束,規範代碼。

接口

關鍵字:interface

語法:

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

[訪問權限修飾符] interface 接口名字 {
    // 接口中的成員
}
  1. 訪問權限修飾符:和類一樣,只能有 public 和默認的default權限。
  2. 接口不是類,不能實例化對象。
  3. 接口,暫時和類寫成平級的關係。
  4. 接口名字是一個標識符,遵循大駝峯命名法

接口中成員的定義:

  1. 屬性:接口中的屬性,默認的修飾符是 public static final
  2. 構造方法:接口中不能寫構造方法
  3. 方法:
    1. 接口中的方法都是抽象方法
    2. 接口中的方法訪問權限修飾符都是public

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

實現接口關鍵字: implements

讓類實現接口:

public class Shunfeng extends Company implements Express {

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

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

    1. 如果同時有父類和接口,那麼繼承父類在前,實現接口在後
  3. 一個類可以實現多個接口

    1. 如果一個類實現的多個接口中有相同的方法,這個方法在實現類中只需要實現一次即可。
  4. 接口之間是有繼承關係的,而且接口之間的繼承是多繼承。

    public interface GrilFriend extends HouseKeeping, Takecare {
    
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章