1.方法重載
1.同一個(gè)類中仇味。
2.參數(shù)列表不同(參數(shù)順序期犬、個(gè)數(shù)叁巨、類型)
3.方法返回值、訪問修飾符任意
4.與方法的參數(shù)名無關(guān)
2.方法重寫
1.有繼承關(guān)系的子類中
2.方法名相同吞杭,參數(shù)列表相同(參數(shù)順序盏浇、個(gè)數(shù)、類型)篇亭,方法返回值相同(也可以是子類類型)
3.訪問修飾符缠捌?訪問范圍需要大于等于父類的訪問范圍(意思是重新不可以降低訪問范圍)
4.與方法的參數(shù)名無關(guān)
3.注意,子類繼承了父類的方法译蒂,重寫沒有構(gòu)成的話曼月,可以考慮是不是重載,因?yàn)槔^承過后柔昼,他們就在同一個(gè)類中哑芹。下面程序,與A構(gòu)成重載捕透,與B構(gòu)成重寫
public class Super{
public float getNum(){
return 3.0f;
}
}
//A
public class Sub extends Super{
public void getNum(double d){}
}
//B
public float getNum(){
return 4.0f;
}
4.例子
首先判斷選項(xiàng)是重寫還是重載
1.CE參數(shù)列表不同聪姿,說明是對繼承過來的函數(shù)進(jìn)行重載
2.DF參數(shù)列表相同,說明要進(jìn)行重寫乙嘀,但是要進(jìn)行重寫返回類型也應(yīng)該相同末购,所以無法構(gòu)成重新。(當(dāng)然由于參數(shù)列表相同虎谢,所以已經(jīng)不是重載了)
class Alpha{
public void bar(int... x){
}
public void bar(int x){
}
}
public class Beta extends Alpha{
//1
}
//A 重寫盟榴,范圍限定符大于父類,這里只能用public
private void bar(int x){}
//B重寫婴噩,正確
public void bar(int x){}
//C
public int bar(String x){return 1;}
//D
public Alpha bar(int x){return new Alpha();}
//E
public void bar(int x,int y){}
//F
public int bar(int x){return x;}
3.在子類中擎场,可以定義與父類重名的屬性(可以認(rèn)為是屬性的重寫)