域和方法的訪問,繼承,重寫

2021-09-06 18:02:12 字數 2657 閱讀 2316

靜態方法和靜態域是屬於類的,呼叫的時候直接通過類名.靜態網域名稱類名.靜態方法名就行,也可以通過物件引用.靜態域和物件引用.靜態方法,因為靜態方法和靜態域是屬於類的,所以即使物件引用為null,也不妨礙對靜態域和方法的訪問。

不過,通過物件引用來操作且出現繼承和隱藏的時候,該引用說明型別決定訪問的是哪乙個類的靜態域和靜態方法,並非物件的實際型別決定。

class a 

}class b extends a

}class test

}

靜態域、靜態方法和非靜態域都可以被繼承和隱藏,非靜態方法可以被繼承和重寫。

/**

* 父類

*/public class a

public void nonstaticmethod() }

/** * 子類,重寫父類的域和方法

*/public class b extends a

public void nonstaticmethod() }

/** * 子類,直接繼承

*/public class c extends a

/**

* 測試類

*/public class test

/* a的非靜態域

a的靜態域

a的靜態方法

a的非靜態方法

-------------------------------

a的非靜態域

a的靜態域

a的靜態方法

a的非靜態方法

-------------------------------

b的非靜態域

b的靜態域

b的靜態方法

b的非靜態方法

-------------------------------

a的非靜態域

a的靜態域

a的靜態方法

b的非靜態方法

*/}

被重寫的非靜態方法只有乙個,不管引用說明型別是哪種,都呼叫的是被改寫的方法。

而那些被隱藏的域或者方法,呼叫的時候會因為引用說明型別的不同,而不同。

以成員變數(非靜態域)為例,解釋一下

如果在子類中對從父類繼承來的成員變數進行重新定義,即出現了子類變數對父類變數的隱藏。所謂隱藏是指子類擁有兩個相同名字的變數,乙個是繼承自父類,另乙個是由自己定義的。

把上面的**稍微修改一下

/**

* 父類

*/class a

public void nonstaticmethod() }

/** * 子類

*/class b extends a

public void nonstaticmethod()

}/**

* 子類,直接繼承

*/class c extends a{}

a的非靜態域

a的靜態域

staticstr

nonstaticstr

-------------------------------

a的非靜態域

a的靜態域

staticstr

nonstaticstr

-------------------------------

a的非靜態域

a的靜態域

a的靜態域

a的非靜態域

-------------------------------

a的非靜態域

a的靜態域

staticstr

a的非靜態域

/**

* 父類

*/class a

public void nonstaticmethod() }

/** * 子類

*/class b extends a

/** * 子類,直接繼承

*/class c extends a{}

a的非靜態域

a的靜態域

a的靜態域

a的非靜態域

-------------------------------

a的非靜態域

a的靜態域

a的靜態域

a的非靜態域

-------------------------------

b的非靜態域

b的靜態域

a的靜態域

a的非靜態域

子類繼承下來的方法操作繼承下來的域!!!

-------------------------------

a的非靜態域

a的靜態域

a的靜態域

a的非靜態域

域出現隱藏現象,所以根據引用型別來判斷操作誰的域,所以如藍色輸出所示,

而方法沒有出現隱藏,僅僅是繼承,根據「子類繼承下來的方法操作繼承下來的域!!!」原則,所以如紅色輸出所示。

方法的過載 繼承 重寫

方法的過載 在乙個類中,方法名稱相同,引數列表不同,與返回值無關的方法,叫做方法的過載.什麼是繼承 子類可以繼承父類共有的屬性和方法.繼承關鍵字是 extends 子類不能繼承父類的構造方法.也就是說super 不是繼承,是呼叫.繼承的優點 實現類的重用,減少 的冗餘.子類繼承了父類後 子類可以訪問...

private方法不能繼承,重寫

public class father void f2 public static void main string args class son extends father protected void f2 輸出 father f1 son f2 解析 父類引用指向子類物件,重寫 f1,f2方...

過載,繼承,重寫和多型的區別

過載,繼承,重寫和多型的區別 繼承是子類獲得父類的成員,重寫是繼承後重新實現父類的方法。過載是在乙個類裡一系列引數不同名字相同的方法。多型則是為了避免在父類裡大量過載引起 臃腫且難於維護。網上看到乙個有趣的說法是 繼承是子類使用父類的方法,而多型則是父類使用子類的方法。下面的例子包含了這四種實現 c...