java的重寫、重載、覆蓋的區別,java重寫重載覆蓋
多態性
通過繼承,一個類可以用作多種類型:可以用作它自己的類型、任何基底類型,或者在實現介面時用作任何介面類型。這稱為多態性
重載
每個類型成員都有一個唯一的簽名。方法簽名由方法名稱和一個參數列表(方法的參數的順序和類型)組成。只要簽名不同,就可以在一種類型內定義具有相同名稱的多種方法。當定義兩種或多種具有相同名稱的方法時,就稱作重載。即重載時相同名稱成員的參數列表是不相同的(參數順序和類型)。
繼承,重寫和隱藏成員 (重寫 = 覆蓋)
派生的類型繼承其基本類型的所有成員;也就是說,這些成員是在衍生類別型之上定義的,並可用於衍生類別型。繼承成員的行為和品質可以通過以下兩種方式來修改:
1、衍生類別型可通過使用相同的簽名定義一個新成員,從而隱藏繼承的成員。將先前的公用成員變成私人成員,或者為標記為 final 的繼承方法定義新行為時,可以採取這種方法。
2、衍生類別型可以重寫繼承的虛方法。重寫方法提供了對方法的一種新定義,將根據運行時的值的類型,而不是編譯時間已知的變數類型來調用方法。只有當虛方法沒有標記為 final 且新方法至少可以像虛方法一樣進行訪問的情況下,成員才能重寫虛方法。
方法名,參數相同形成重寫,重寫的方法不能降低原方法的"可見度",也不能改變原方法的返回值類型。
方法名相同,參數不同(個數、類型)形成重載,重載的方法可看成一個全新的方法,與原方法相比它可以有不同的"可見度"和“返回值類型”。如下例:
class A {
protected int method1(int a, int b) { return 0; }
}
public class B extends A{
public int method1(int a, int b) { return 0; } //正確,重寫父類方法,可以擴大存取權限
//private int method1(int a, int b) { return 0; } //錯誤,重寫父類方法,不能降低了存取權限
//private long method1(int a, int b) { return 0; } //錯誤,重寫父類方法,不能改變返回值類型
public short method1(int a, long b) { return 0; }//正確,重載自身的方法,可以有不同的存取權限和返回值類型
private int method1(int a, long b) { return 0; }//正確,重載自身的方法,可以有不同的存取權限和返回值類型
}
但這裡 方法public short method1(int a, long b) { return 0; }和 方法private int method1(int a, long b) { return 0; }不能同時存在,因為在同一類中,不允許存在相同名字和參數類型的方法(重寫的方法)。
java 重載與重寫的不同
java的重寫,是指在子類中對父類的某方法進行重新定義,其子類的該方法名以及參數位置和個數均與父類相同,從而在調用子類的該方法時,不會執行父類的方法.如果在父類中以final定義的方法,在子類中無法重寫.
java中重載與重寫的不同與聯絡
應該是重載和覆蓋;重載就是在同一個類中定義多個同名不同形態的方法;覆蓋是針對子類對父類方法的覆蓋,在子類中對父類定義的方法重新定義,在子類中將隱藏來自父類的同形態方法。可以實用super關鍵字訪問被子類覆蓋的父類方法。所謂同形態是指方法名相同、參數列表相同(包括參數的類型、順序、個數);反之則為不同形態。