好程式設計師Java實用教程系列之物件的轉型

好程式設計師IT發表於2019-12-11

好程式設計師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();
  2. 抽象方法,只能夠寫在抽象類中。

抽象類:

  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 {
    	}


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2668084/,如需轉載,請註明出處,否則將追究法律責任。

相關文章