java的多型性

2021-09-01 13:40:42 字數 1108 閱讀 3162

多型包括重寫(override)和過載(overload),重寫發生在超類和子類之間,子類覆蓋超類的方法。過載發生在同乙個類中,方法名字相同,方法的形式引數和返回值不同。

執行**如下:

package com.base.oo;

class a

public string show(a obj)

}class b extends a

public string show(a obj)

}class c extends b

class d extends b

public class override0

}

得到的執行結果:

a and a

a and a

a and d

b and a

b and a

a and d

b and b

b and b

a and d

結合下面的重寫規則對**的執行過程和結果進行理解。

重寫規則(override):

當超類物件引用變數引用子類物件時,被引用物件的型別而不是引用變數的型別決定了呼叫誰的成員方法,但是這個被呼叫的方法必須是在超類中定義過的,也就是說被子類覆蓋的方法。

重寫時,方法呼叫的優先順序是:

this.show(o)>super.show(o)>this.show((super)o)>super.show((super)o)

在a2.show(b)中,a2是乙個引用變數,

型別為a

,則this為a2,b是b的乙個例項,於是它到類a裡面找show(b obj)方法,沒有找到,於是到a的super(超類)找,而a沒有超類,因此轉到第三優先順序this.show((super)o),this仍然是a2,這裡o為b,(super)o即(super)b即a,因此它到類a裡面找show(a obj)的方法,類a有這個方法,但是由於

a2引用的是類b的乙個物件,b覆蓋了a的show(a obj)方法,因此最終鎖定到類b的show(a obj),輸出為"b and a」。

java的多型性

public class duotaitest class 子類 extends 父類 父類 物件名 new 子類 2.抽象類多型 還算常用 abstract class 父類 class 子類 extends 父類 父類 物件名 new 子類 3.介面多型 非常常用 inte ce 父類 clas...

java物件的多型性

向上轉型 父類 父類物件 子類例項 example class person class student public class movedemon 向下轉型 子類 子類物件 子類 父類例項 父類向下轉型要用強制 example class person class student public ...

JAVA中的多型性

物件導向的特徵是封裝 繼承 多型,其中多型是指不同類的物件對同一訊息做出相應,即同一訊息可以根據傳送物件的不同而採用多種不同的行為方式。類的多型性表現在過載 重寫 物件的多型性上,過載與重寫在之前的博文中做過講解,這裡不再贅述,本文主要講解物件的多型性。物件的多型性指子類與父類的相互裝換,包含如下兩...