重写与重载常见问题
? ? ? ? 通常,派生類繼承基類的方法,因此,在調用對象繼承方法的時候,調用和執行的是基類的實現.但是,有時需要對派生類中的繼承方法有不同的實現. 例如,假設動物類存在"跑"的方法,從中派生出馬和狗,馬和狗的跑得形態是各不相同的,因此同樣方法需要兩種不同的實現,這就需要"重新編寫"基類中的方法
? ? ? ? 重寫只能用于父類與子類之間!
? ? ? ?重寫的規則: 子類中的方法必須與父類中的方法一致,并且范圍只能擴大不能縮小,例如父類中定義的方法是 public 型的 子類中的就不能寫成protected 型否則會報編譯錯誤!父類中的定義為protected 型的子類中的可以定義為public型的
? ? ? 重載,在一個類定義中,可以編寫幾個同名的方法,但是只要它們的簽名參數列表不同,Java就會將它們看做唯一的方法。簡單的說,一個類中的方法與另一個方法同名,但是參數表不同,這種方法稱之為重載方法。
? ? ? ?重載是可使函數、運算符等處理不同類型數據或接受不同個數的參數的一種方法
? ? ? 重載的規則: ?重載只發生在同類之中,并且只有參數列表不一樣(包括參數列表的順序 、 類型、個數)才可稱之為重載,返回值類型不一樣參數列表一樣不能稱之為重載!且 重載的返回值類型可以不一樣
? ? 下面是重載和重寫常見問題:
? ? ? ? ?
package test;public class OverLoadDemo {/*** @param args*/public static void main(String[] args) {OverLoadDemo o = new OverLoadDemo();o.method(1, 's');// 沒有 與參數一致的方法,這個時候就會有隱式轉換 轉換時 有就近原則 像 char 轉化為 int 更方便故輸出woainitingzai}public int method(int a,long b){System.out.println("helloword");return 0;}public long method(int a,short b){// 重載只是看參數列表的順序 、類型 、個數 是否不一樣 才算是重載System.out.println("tingting");// 如果是返回值類型不同 方法名不同等等 都不能算是重載return 0;}public int method(int a,int b){System.out.println("woainitingzai");return 0;} // public short method(int a,int b){ 不是重載編譯錯誤 // System.out.println("我愛你婷!"); // return 0; // }}class T extends OverLoadDemo{ // public long method(int a,long b){編譯錯誤 如果子類的參數列表和父類的參數列表一樣 且返回值類型不一樣則會報編譯錯誤 // System.out.println("hello"); // return 0; // }public int method(int a,char c){// 無編譯錯誤也并不是覆蓋 覆蓋 就是 和父類的方法一樣 返回值類型 方法簽名都必須一樣return 0;} // private long method(int a,short b){//編譯錯誤 如果把父類的這個方法改為private型的就無編譯錯誤 // return 0; // } // long method(int a,short b){//縮小了父類的范圍編譯錯誤 // return 0; // } // protected int method(int a,long b) {//縮小了父類的范圍 編譯錯誤 // return 0; // // }}? ? ? ? ? ?
轉載于:https://www.cnblogs.com/hgndinfo/archive/2012/04/22/2713982.html
總結
- 上一篇: 1029-短语搜索
- 下一篇: [原]逆向iOS SDK -- _UII