java學習筆記44 多型

2021-09-12 19:32:01 字數 1990 閱讀 9526

允許不同類的物件對同一訊息做出響應。即同一訊息可以根據傳送物件的不同而採用多種不同的行為方式。

1)乙個物件的實際型別是確定的

例如: new student(); new person();等

2)可以指向物件的引用的型別有很多

例如: student繼承了person類

student s1 = new student();

person s2  = new student();

object s3  = new student();

因為person和object都是student的父型別

注:乙個物件的實際型別是確定,但是可以指向這個物件的引用的型別,卻是可以是這物件實際型別的任意父型別。

3)乙個父類引用可以指向它的任何乙個子類物件

例如:object o = new anyclass();

person p = null;

p = new student();

p = new teacher();

p = new person();

4)多型中的方法呼叫

例如:public class person

}public class student extends person

//呼叫到的run方法,是student從person繼承過來的run方法

main:

person p = new student();

p.run();

例如:public class person

}public class student extends person

}//呼叫到的run方法,是student中重寫的run方法

main:

person p = new student();

p.run();

注:子類繼承父類,呼叫a方法,如果a方法在子類中沒有重寫,那麼就是呼叫的是子類繼承父類的a方法,如果重寫了,那麼呼叫的就是重寫之後的方法。

5)子類中獨有方法的呼叫

例如:public class person

}public class student extends person

}main:

person p = new student();

//呼叫到繼承的run方法

p.run();

//編譯報錯,因為編譯器檢查變數p的型別是person,但是在person類中並沒有發現test方法,所以編譯報錯.

p.test();

注:乙個變數x,呼叫乙個方法test,編譯器是否能讓其編譯通過,主要是看宣告變數x的型別中有沒有定義test方法,如果有則編譯通過,如果沒有則編譯報錯.而不是看x所指向的物件中有沒有test方法.

思考:為什麼編譯器會是這樣檢查?

6)子類引用和父類引用指向物件的區別

student s = new student();

person p = new student();

變數s能呼叫的方法是student中有的方法(包括繼承過來的),變數p能呼叫的方法是person中有的方法(包括繼承過來的)。

但是變數p是父型別的,p不僅可以指向student物件,還可以指向teacher型別物件等,但是變數s只能指向studnet型別物件,及student子型別物件。變數p能指向物件的範圍是比變數s大的。

object型別的變數o,能指向所有物件,它的範圍最大,但是使用變數o能呼叫到的方法也是最少的,只能呼叫到object中的宣告的方法,因為變數o宣告的型別就是object.

7)多型的使用

如果使用多型解決以下問題:

public class game

}public class basketball

}在這種情況下,使用者不斷的變動需求:

想要增加足球遊戲的執行

想要增加桌球遊戲的執行

想要增加橄欖球遊戲的執行

想要增加羽毛球球遊戲的執行

想要增加鉛球遊戲的執行

....

如何處理?

java學習筆記之 多型

父類引用指向子類物件時,注意以下幾點 1 例項化乙個沒有名字的子類物件,然後向上轉型為父類的父類的引用,先去呼叫子類重寫的方法,子類沒有重寫就再去呼叫父類的方法。2 只能呼叫父類中定義過的方法和變數 父類中沒有定義過呼叫的時候要報錯 3 專屬於子類的成員變數,在子類方法中被訪問時,這時候通過父類引用...

JAVA學習筆記之多型

型別轉換分為自動型別轉換和強制型別轉換 1.自動型別轉換 向上型別轉換 父類 小型別 子類 大型別 不存在風險 animal animal new animal dog dog new dog animal dog 自動型別轉換,不存在風險2.強制型別轉換 向下型別轉換 子類 大型別 父類 小型別 ...

java筆記 多型

一 多型的概述 多型 物件在不同時刻表現出來的不同狀態 多型是針對引用型別 編譯期間的狀態和執行期間的狀態。前提條件 a 要有繼承關係 b 要有方法重寫 c 要有父類引用指向子類物件 class fu class zi extends fu class duotai 這就是多型編譯期間父型別,執行期...