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

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

體現:程序員

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

轉型:code

  1. 向上轉型對象

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

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

instanceof關鍵字

  1. 針對於向下轉型的。教程

    1. 若是向下轉型不成功,會怎樣?接口

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

      1. 在向下轉型以前,咱們先判斷一下這個對象是否是要轉型的類型
      2. 怎麼判斷?ast

        1. 關鍵字 instanceofclass

          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 {
        
    }
相關文章
相關標籤/搜索