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

          體現(xiàn):

          父類的引用可以指向子類的對象
          接口的引用可以指向實現(xiàn)類的對象
          轉型:

          向上轉型
          由子類類型轉型為父類類型,或者由實現(xiàn)類類型轉型為接口類型
          向上轉型一定會成功,是一個隱式轉換
          向上轉型后的對象,將只能訪問父類或者接口中的成員
          向下轉型
          由父類類型轉型為子類類型,或者由接口類型轉型為實現(xiàn)類類型
          向下轉型可能會失敗,是一個顯式轉換
          向下轉型后的對象,將可以訪問子類或者實現(xiàn)類中特有的成員
          instanceof關鍵字
          針對于向下轉型的。

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

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

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

          怎么判斷?

          關鍵字 instanceof

          Animal animal = new Dog();
          if (animal instanceof Dog) {
          // 說明animal的確是一個Dog
          }
          如果一個類中重寫了父類的某一個方法。此時:

          如果用這個類的對象來調用這個方法,最終執(zhí)行的是子類的實現(xiàn)。
          如果用向上轉型后的對象來調用這個方法,執(zhí)行的依然是子類的實現(xiàn)。
          因為向上轉型后的對象,歸根到底還是子類對象。
          抽象類與抽象方法
          抽象:abstract

          抽象類:

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

          抽象方法:

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

          特點:

          抽象方法:

          抽象方法使用abstract來修飾,只有聲明,沒有實現(xiàn)。

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

          抽象類:

          抽象類使用abstract來修飾,抽象類不能實例化對象。
          抽象類中是可以寫非靜態(tài)的成員的,這時候這些非靜態(tài)成員是可以繼承給子類的。
          抽象類中是可以包含構造方法的。
          結合抽象類和抽象方法:

          非抽象子類在繼承一個抽象父類的同時,要實現(xiàn)父類中所有的抽象方法。
          注意事項:

          final關鍵字

          抽象類可以用final來修飾嗎?
          不能!因為final表示這個類無法被繼承。但是對于抽象類來說,如果無法被繼承,則這個抽象類沒有任何意義。
          抽象方法可以用final修飾嗎?

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

          可以用抽象類和抽象方法來實現(xiàn)一些簡單規(guī)則的制定。

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

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

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

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

          接口
          關鍵字:interface

          語法:

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

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

          屬性:接口中的屬性,默認的修飾符是 public static final
          構造方法:接口中不能寫構造方法
          方法:
          接口中的方法都是抽象方法
          接口中的方法訪問權限修飾符都是public
          接口是需要被類來實現(xiàn)的。

          實現(xiàn)接口關鍵字: implements

          讓類實現(xiàn)接口:

          public class Shunfeng extends Company implements Express {

          }
          一個非抽象類在實現(xiàn)接口后,需要實現(xiàn)接口中所有的抽象方法。

          一個類在繼承自一個父類后,還可以再去實現(xiàn)接口。

          如果同時有父類和接口,那么繼承父類在前,實現(xiàn)接口在后
          一個類可以實現(xiàn)多個接口

          如果一個類實現(xiàn)的多個接口中有相同的方法,這個方法在實現(xiàn)類中只需要實現(xiàn)一次即可。
          接口之間是有繼承關系的,而且接口之間的繼承是多繼承。

          public interface GrilFriend extends HouseKeeping, Takecare {

          }

          友情鏈接
          ioDraw流程圖
          API參考文檔
          OK工具箱
          云服務器優(yōu)惠
          阿里云優(yōu)惠券
          騰訊云優(yōu)惠券
          京東云優(yōu)惠券
          站點信息
          問題反饋
          郵箱:[email protected]
          QQ群:637538335
          關注微信

                我把她日出了好多水 | 已婷婷狠狠18禁久久YY | 一攻一受4p嗯啊巨肉寝室动漫 | 男女一进一出动态图 | 男生和女生插插插 |