用父類宣告物件和用子類宣告物件

2021-08-29 13:26:54 字數 500 閱讀 3295

class father

} class son extends father

} class test

} 首先都是訪問本身類的東西(方法與屬性)的.(父類定義就呼叫父類的,子類定義的話就呼叫子類的)

當乙個父類定義的變數引用乙個子類例項時,呼叫乙個方法時,這個方法將會呼叫子類,因為方法被覆蓋.

情況就特殊在父類定義變數,而引用子類對像的時候.

father(父類) myfather = new son(子類)();

所以輸出為:

20in son

10in fathor

10in son

通過引用型別的變數來訪問所引用物件的方法和屬性的時候,jvm採用以下繫結規則。

例項方法與引用變數實際引用的物件的方法繫結,動態繫結,因為是在執行時由jvm動態決定的

靜態方法,成員變數(靜態和例項變數)與引用變數所宣告的靜態方法和成員變數繫結,這用繫結是在編譯階段做的繫結,是靜態繫結。

為什麼乙個物件可以用父類宣告,卻用子類例項化

這個例項是子類的,但是因為你宣告時是用父類宣告的,所以你用正常的辦法訪問不到子類自己的成員,只能訪問到從父類繼承來的成員。在子類中用override重寫父類中用virtual申明的虛方法時,例項化父類呼叫該方法,執行時呼叫的是子類中重寫的方法 如果子類中用new覆蓋父類中用virtual申明的虛方法...

宣告類和定義物件

class date private,public稱之為成員訪問限定符,此外還有protect。被宣告為private 私有成員 只能被本類中的成員函式引用,而public 公用成員 可以被本類的成員所引用,也可以被類外函式引用,protect宣告的為受保護的成員,不能被類外訪問,但可以被派生類的成...

多型 父類宣告,子類實現

public class base public void callname static class subextends base public static void main string args 1 父類靜態 塊 包括靜態初始化塊,靜態屬性,但不包括靜態方法 2 子類靜態 塊 包括靜態初...