前言 :
很早的時候,我就知道這兩個東西,但是,也僅僅是停留在知道的程度而已,對于什么是重寫,什么事重載,還是感到十分的迷惑,迷茫。正好,在軟考復習時又經歷這兩個東西,細心一點,探究了一下,有點收獲,借助java程序,想分享給大家
定義:
重載(overload),重載是可使函數、運算符等處理不同類型數據或接受不同個數的參數的一種方法。簡單說,就是函數或者方法有同樣的名稱,但是參數列表不相同的情形,這樣的同名不同參數的函數或者方法之間,互相稱之為重載函數或者方法,目的當然是處理不同類型數據
重寫(override或者overwrite),派生類繼承基類的方法,因此,在調用對象繼承方法的時候,調用和執行的是基類的實現.但是,有時需要對派生類中的繼承方法有不同的實現,重寫"基類方法就是修改它的實現或者說在派生類中重新編寫實現方法
java中的重載和重寫的區別??
重寫一般多發生在不同的類且存在繼承關系之間,而重載多是在一個類里或者一塊代碼段里,由于重載可以在同一個類中定義功能類似的函數,調用方法是通過傳遞給他們不同參數個數和參數類型來決定具體使用那個方法。這給程序員管理類的相似函數提供了極大的方便
?
特點
重載:函數名必須相同,返回值可以相同,也可以不同,但是特征標必須不同。
重寫:子類與父類某一方法具有相同的方法名、返回類型和參數表,則新方法將覆蓋原有的方法。如需父類中原有的方法,可使用super關鍵字,該關鍵字引用了當前類的父類,子類函數的訪問修飾權限不能少于父類的
java標識符命名規則。?
舉例說明:
package test; /**** @author 李衛中*/ public class Test {public static void main(String[] args){Person person1=new Person(); //new了一個系統默認的Person的構造方法person1.getInfo();//************************person1.name="米老師(1)";person1.age=19;person1.getInfo(); //賦值區//************************Person person2=new Person("米老師",18); //new是Person的重載的構造方法,內帶參數name,ageperson2.getInfo();//**************************Teacher teacher1=new Teacher(); teacher1.getInfo(); //重寫父類Person類的getInfo方法//**************************teacher1.name="姜老師1";teacher1.age=21;teacher1.sex="女1";teacher1.getInfo(); //賦值區//**************************Teacher teacher2=new Teacher("姜老師",20,"女");teacher2.getInfo();} } class Person{String name;int age; //以上部分為Person類的成員變量Person(){}Person(String _name,int _age){ //對Person類的Person()構造方法重載,一樣的方法名,不 一樣的的參數,參數類型this.name=_name;this.age=_age; //this,有就近聲明原則,也就是說,他離哪個類近,就可以代表那個類( 本類內,代表Person類)}public void getInfo(){System.out.println("我叫"+name+"\n"+"我的年齡是:"+age);} }class Teacher extends Person{String sex;Teacher(String _name,int _age,String _sex){super(_name,_age);this.sex=_sex;}Teacher(){super(); //其實,如果沒有super的話,編譯器會默認去選擇父類中沒有參數的構造方法}public String teachBookName(String bookName){return bookName;}public void getInfo(){System.out.println("我叫"+name+"\n我的年齡是:"+age+"\n我的性別是"+sex); //對父類中的getInfo()方法進行重寫,算是一種覆蓋} }
運行結果:
java static。
應該很明顯了吧。
?
收獲
? ? ? ? 對于方法重載,就是說,我給你規定個處理某種情況的方法名,而內部具體參數我不做要求,你可以隨意定義一個符合你需要的方法,但是要注意,方法名不能變,但是參數值,參數類型,返回值類型,就看你心情了,可以一樣,也可以不一樣
? ? ? ? 對于重寫,我給你指定了一個方法,包括方法需要的參數類型,這些你是不能動的,但是你可以靈活的去謝你學要的方法,然后父類的方法就被覆蓋了,執行子類自己的方法。
方法的重寫和重載、?
小結
? ? ? ?感覺現在學習的知識都是對前面的深入和補充,以前我沒有即時總結,在這一階段的工程中,正是我們深入探究為什么的過程,正好可以彌補我們以前的遺憾,好好學習,打牢基礎,對我們接下來的學習有百利而無一害
友情提示:如果您想知道運行結果區為何會出現如此情況,或者他們在內存里是怎么做到的,請繼續關注我的系列博客(內存分析)