Java面試——過載、重寫、重構的區別
一、過載
建構函式是一種特殊的函式,使用建構函式的目的是用來在物件例項化時初始化物件的成員變數。由於建構函式名字必須與類名一致,我們想用不同的方式例項化物件時,必須允許不同的構造方法同時存在,這就用到了過載。
過載雖然起源於構造方法,但是在普通方法中也可以使用方法的過載。方法的過載就是在同一個類中允許同時存在多個同名方法,只要這些方法的引數型別、個數、順序不同即可。
package com.java.test; public class ReLoad { //構造方法的過載 public ReLoad(int a,int b) { System.out.println("a+b"); } public ReLoad(int a){ System.out.println("a"); } //普通方法的過載 public static int reload(int a,int b){ return a+b; } public static int reload(int a){ System.out.println(a); return a; } public static double reload(double a,intb){ return a+b; } public static double reload(int a,double b){ return a+b; } }
知道了方法的過載,我們很容易想到定義不定長引數來實現方法的過載 。
//定義不定長引數實現方法的過載 public static int reload(int...a){ int s=0; for(int i=0;i<a.length;i++){ s+=i; } return s; } //呼叫 reload(1,2,3); reload(1,2,3,4,5);
二、重寫
重寫(又叫覆蓋)是繼承的實現方式之一,也就是說只有在子類中才會出現方法的重寫。重寫是指在子類中保留父類成員方法的名稱不變,引數列表不變,重寫成員方法的實現內容,修改成員方法的返回值型別(必須滿足修改的返回值型別是父類中同一方法返回值型別的子類),或更改成員方法的儲存許可權。
package com.java.test; class ExtendsTest{ protected int adds(int a,int b){ int s=0; s=a+b; return s; } protected ExtendsTest doIt(){ return null; } } public class tests extends ExtendsTest{ //重寫成員方法的實現內容,修改成員方法的儲存許可權 public int adds(int a){ return a; } //修改成員方法的返回值型別 protected tests doIt(){ return null; } //重構,只重寫實現內容 protected int adds(int a,int b){ System.out.println("重構"); return a+b; } }
三、重構
重構是繼承中一種特殊的重寫方式,只重寫子類方法中的實現內容,成員方法的名稱,引數型別、個數及成員方法的返回值都保持不變。
綜上,過載可以出現在任意類的任意方法中,方法的名稱相同,引數的型別,個數,順序三個中只要有一個不同即可實現方法的過載。重寫和重構是發生在子類中,也就是說只有出現繼承才會需要重寫和重構的實現。重寫可以通過修改成員方法的實現內容,修改成員方法的返回值型別或更改成員方法的儲存許可權實現,但必須保證方法名和引數列表不變。而重構是一種特殊的重寫方式,只可以重寫實現內容,其他都不能改變。
寫在最後:
既然看到這裡了,覺得筆者寫的還不錯的就點個贊,加個關注唄!點關注,不迷路,持續更新!!!