呼叫乙個方法,傳遞乙個引用型別資料,即物件進去,遵循下面規則:
(1)、如果該方法的引數,正好是這個物件的引用,那麼就呼叫這個方法。
(2)、如果沒有正好對這個物件的引用,那麼就找引數是其父類引用的方法(如果是介面,就找相應的介面引用),如果父類也沒有,就找父類的父類。。。直到找不到,報錯。
那麼,記住這一點,總和前面父類子類方法呼叫的問題,就無往而不利了。
看下面的一道題
public class demo2
}class a
public string show(a obj)
}class b extends a
public string show(a obj)
}class c extends b
class d extends b
答案和解釋
1、第1行的結果為 a and a
因為傳遞進去的是乙個b類物件,而a類中沒有b類物件相應的show方法,那麼就找b類物件的父類引用,所以為a and a
2、第2行的結果為 a and a
原因和1相同
3、第3行的結果為 a and d
因為傳遞的是乙個d物件,因為有與d類物件相應的show方法,所以呼叫相應的show方法,輸出 a and d
4、第4行的結果為 b and a
a2是父類引用子類的物件,雖然傳遞進來的引數是b類物件,而子類b中也有相應的show方法,但是父類引用不能呼叫它,因為它是子類獨有的方法。所以只能在自己類裡面的方法裡面找,找到了這個方法
public string show(a obj)
又因為子類重寫了這個方法
public string show(a obj)
所以呼叫子類重寫的方法,所以是b and a;
5 、第5行的結果為 b and a
原因和4類似。
6、第6行的結果為 a and d
父類的引用,在父類中找到了與d類相應的show()方法,所以呼叫
public string show(d obj)
輸出結果為a and d;
7、第7行的結果為 b and b
這個就不解釋了
8、第7行的結果為 b and b
不解釋9、第9行的結果為 a and d
因為b從a類那裡繼承了 public string show(d obj)
所以呼叫這個方法,結果是a and d
9 繼承和多型
class childclass parentclass python 的所有類都派生自object類。如果定義乙個類的時候沒有指定它的父類,那麼它的父類預設就是object類。熟悉object類的方法是十分重要的,主要看以下四個方法 loan loan 1,1,1,smith print loan...
繼承 多型的相關知識
一 繼承 在php中,使用extends實現繼承。作用 如果我們不使用繼承,就要寫很多重複的 二 繼承的構造方法 1 子類繼承父類時,子類沒有構造方法,例項化子類物件時,會執行父類的構造方法。子類如果有自己的構造方法,例項化子類物件時,只會自動執行子類自己的構造方法。2 子類的構造方法有兩個引數,所...
java筆記3繼承和多型
繼承和訪問控制符?無條件繼承有條件訪問?子類能夠繼承父類中public和protected成員 子類能夠繼承父類中default成員,但 子類與父類必須位於同一包內 子類不能繼承父類的private成員 子類不能直接使 用父類隱藏的成員變數和重寫的父類方法 super 子類通過繼承的父類的方法來訪問...