重寫
父類引用指向子類物件
add(int, int)
add(int, int, int)
add(int, int)
add(int, float)
add(int, float)
add(float, int)
int
add(int, int)
float
add(int, int)
public
class
animal
}public
class
catextends
animal
public
static
void
main
(string args)
}
meow
不能降低方法的訪問許可權。
static, private, final 標記的方法以及類的構造方法不能被重寫覆蓋。
class
human
}class
boyextends
human
public
static
void
main
( string args)
}
human walks
human walks
靜態繫結使用的是類資訊:類的型別決定呼叫方法,而動態繫結使用的是物件資訊:物件的型別決定呼叫方法。
方法過載使用靜態繫結,而方法重寫使用動態繫結。
class
a public string show
(a obj)
}class
bextends
a public string show
(a obj)
}class
cextends
bclass
dextends
bpublic
class
main
}
1--a and a
2--a and a
3--a and d
4--b and a
5--b and a
6--a and d
7--b and b
8--b and b
9--a and d
a1.show(c)
由編譯器進行靜態繫結(前期繫結)方法二 show(a obj)。
a1.show(d)
由編譯器進行靜態繫結(前期繫結)方法一 show(d obj)。
a a2 = new b();
多型建立父類引用,指向子類物件,a2 向上轉型具有呼叫 a 類方法一 show(d obj) 和方法二 show(a obj) 的能力,其中子類 b 重寫父類 a 的方法二 show(a obj) 為方法四 show(a obj)。記住向上轉型存在缺點,即不能呼叫子類中有,父類沒有的方法,如方法三 show(b obj)。
a2.show(b)
執行時動態繫結(後期繫結)方法四 show(a obj)。
a2.show(c)
執行時動態繫結(後期繫結)方法四 show(a obj)。
a2.show(d)
由編譯器進行靜態繫結(前期繫結)方法一 show(d obj)。
b b = new b();
正常建立物件 b,涉及函式過載 show(),b 具有呼叫方法三 show(b obj) 和方法四 show(a obj) 的能力。同時 b 繼承自 a 因此擁有方法一 show(d obj) 和方法二 show(a obj) 其中方法二被方法四重寫覆蓋。
b.show(b)
由編譯器進行靜態繫結(前期繫結)方法三 show(b obj)。
b.show(c)
由編譯器進行靜態繫結(前期繫結)方法三 show(b obj)。
b.show(d)
由編譯器進行靜態繫結(前期繫結)方法一 show(d obj)。
C 特性之多型性
c 多型性概括為 乙個介面,多種方法 程式在執行時才決定呼叫的函式,它是物件導向程式設計領域的核心概念。c 多型性是通過虛函式來實現的,虛函式允許子類重新定義成員函式,而子類重新定義父類的做法成為覆蓋或者重寫,重寫可以有兩種,直接重寫成員函式和重寫虛函式,只有重寫了虛函式的才能算作體現了c 多型性 ...
java基礎之多型性
物件導向特徵 多型性 1 多型性 乙個事物的多種形態。如 方法的過載和重寫 子類物件的多型性 虛擬方法呼叫 父類引用指向子類的物件實體,當呼叫方法時,執行的是子類重寫父類的方法 2 子類物件的多型性使用的前提 要有繼承性 要有子類對父類方法的重寫。3 程式執行分成編譯時和執行時狀態。對於多型性來說,...
c 之 多型性
先看乙個例子 然後我們引進多型,看看 公升級的威力 1 include2 using namespace std 34 class liberation 10virtual intcombat 1114 private 15 intcapability 16 17class liberation a...