溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

好程序員Java實用教程系列之對象的轉(zhuǎn)型

發(fā)布時間:2020-09-30 03:21:05 來源:網(wǎng)絡(luò) 閱讀:101 作者:wx5da18b5c4b01e 欄目:編程語言

好程序員Java今日分享實用的Java教程之對象的轉(zhuǎn)型

體現(xiàn):

  1. 父類的引用可以指向子類的對象
  2. 接口的引用可以指向?qū)崿F(xiàn)類的對象

轉(zhuǎn)型:

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

    1. 如果向下轉(zhuǎn)型不成功,會怎樣?

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

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

      2. 怎么判斷?

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

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

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

抽象:abstract

抽象類:

? 用關(guān)鍵字abstract修飾的類,就是抽象類

抽象方法:

? 用關(guān)鍵字abstract修飾的方法,就是抽象方法

特點:

抽象方法:

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

    public abstract void bark();
    1. 抽象方法,只能夠?qū)懺诔橄箢愔小?/li>

抽象類:

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

結(jié)合抽象類和抽象方法:

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

注意事項:

final關(guān)鍵字

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

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

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

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

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

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

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

接口

關(guān)鍵字:interface

語法:

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

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

接口中成員的定義:

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

接口是需要被類來實現(xiàn)的。

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

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

public class Shunfeng extends Company implements Express {

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

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

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

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

    public interface GrilFriend extends HouseKeeping, Takecare {
    
    }
向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI