1. 程式人生 > >Java面試——重載、重寫、重構的區別

Java面試——重載、重寫、重構的區別

不同的 名稱 權限 出現 同時 通過 方法名 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,int  b){
    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;
  }
}

三、重構

重構是繼承中一種特殊的重寫方式,只重寫子類方法中的實現內容,成員方法的名稱,參數類型、個數及成員方法的返回值都保持不變

綜上,重載可以出現在任意類的任意方法中,方法的名稱相同,參數的類型,個數,順序三個中只要有一個不同即可實現方法的重載。重寫和重構是發生在子類中,也就是說只有出現繼承才會需要重寫和重構的實現。重寫可以通過修改成員方法的實現內容,修改成員方法的返回值類型或更改成員方法的存儲權限實現,但必須保證方法名和參數列表不變。而重構是一種特殊的重寫方式,只可以重寫實現內容,其他都不能改變。

寫在最後:

既然看到這裏了,覺得筆者寫的還不錯的就點個贊,加個關註唄!點關註,不迷路,持續更新!!!

Java面試——重載、重寫、重構的區別