* 關于方法的覆寫:* 關于方法的重寫和覆蓋的前提條件:* 子類繼承父類,就繼承了父類的所有方法和屬性,就相當于把父類的代碼完全復制一份到子類,只是相當于* 我們子類中可以添加新的方法和屬性,同時也可以擴展改寫繼承自父類的方法* 1 什么時候方法要進行重寫?* 如果父類中的方法已經無法滿足子類的要求,需要將父類中的方法進行重新寫一遍* 2.子類如果重寫父類中的方法之后,這類對象一定調用重寫之后的方法* 3 發生方法覆蓋的條件:* 第一: 發生在具有繼承關系的兩個類之間* 第二: 必須具有相同的方法名,相同的返回值類型,相同的參數列表(如果是參數列表不同,系統就會認為這兩個是不同的方法進行重載)* (返回值代表了函數的功能,復寫不能更改函數的功能)* 第三: 重寫的方法不能比被重寫的方法擁有更低的訪問權限* 第四: 重寫的方法不能比被重寫的方法拋出更廣泛的異常* 第五: 私有的方法不能被覆蓋* 不調用的時候就沒有報錯* 調用的時候才會報錯,說明,這個方法是運行時錯誤* 第六: 構造方法無法被覆蓋,因為構造方法無法被繼承* 第七: 靜態的方法不存在被覆蓋* 因為,靜態方法進來以后,不會再有新的內存操作,所以,就沒有覆蓋這一說* 第八: 覆蓋值得是成員方法,和成員變量無關* 成員變量,是指這個類代表的所有個體的共有屬性,只是屬性值不一樣** 4 繼承最基本的作用:代碼復用* 繼承最基本的功能:方法可以重寫* new也是代碼的重用,但是不可以進行擴展,,重寫就是擴展,不可以* new的時候,只能夠被調用,對數據進行刪減改查,不能夠進行功能擴展
* 私有的方法無法被覆蓋,即使在程序中重寫了方法,但是底層仍然會調用父類方法下面是一個覆寫的例子://父類class Override_02{//一個類 //私有方法 PRivate void m_1(){//私有的沒有返回值的m_1方法 System.out.println( "A'm_1 method invoke!!" );//輸出 } public void m2(){ System.out.println( "我是父類" ); } //入口 public static void main (String [] args){//公共的靜態的沒有返回值的main方法,是程序的入口 //多態:這里是私有方法,不能被繼承 Override_02 a = new B();//運行原理:把子類對象的地址賦值給父類的對象(多態),輸出的時候先看能不能被繼承,如果不能被繼承,那就輸出父類的內容,如果能被繼承,就看能能不能被覆寫,(要求:返回值,方法名,形參列表都要一樣),如果沒被覆寫,就輸出父類的內容,如果被覆寫了,就輸出子類的新內容 a.m_1();//父類中的m_1方法不能被繼承,所以輸出的是父類的m_1 a.m2();//父類中的m2方法能被繼承,所以輸出子類中的內容,因為子類的方法名,返回值,形參列表和父類相同,所以可以被復寫,輸出子類的新內容 }}//子類class B extends Override_02{ //嘗試重寫父類的私有方法B(){ } public void m_1(){ System.out.println( "'B'm_1 method invoke" ); } public void m2(){ System.out.println( "我是子類 " ); }}
由于學習方法的覆寫的時候,還沒有學習多態,所以里面涉及多態的東西我也知道的不是很多,主要的是關于方法的覆寫,運行原理也是我自己的理解寫出來的,有什么不對的地方還希望和大家多多交流,O(∩_∩)O謝謝!
新聞熱點
疑難解答