java中使用extends關鍵字完成繼承,和C++中的繼承不同之處在于java隻支援單繼承,不支援多重繼承。 繼承讓我們的代碼編碼變得簡單,維護也變得簡單,擴充變得容易。我們在繼承的時候不能繼承構造方法,一個類得到構造方法隻有兩種方法,一種是自己定義構造方法,一種是使用JVM配置設定的預設構造方法。
當方法名稱相同,但是參數不一樣的時候,這就是方法的重載:
- 方法的重載傳回值類型可以不一樣
- 方法的修飾符也可以不一樣
- main方法也可以被重載
方法重寫 :如果在子類中定義一個方法,其名稱、傳回類型及參數簽名正好與父類中某個方法的名稱、傳回類型及參數簽名相比對,那麼可以說,子類的方法覆寫了父類的方法。
- 子類的方法名稱傳回類型及參數簽名 必須與父類的一緻
- 子類方法不能縮小父類方法的通路權限
- 子類方法不能抛出比父類方法更多的異常
- 方法覆寫隻存在于子類和父類之間,同一個類中隻能重載
- 父類的靜态方法不能被子類覆寫為非靜态方法
- 子類可以定義于父類的靜态方法同名的靜态方法,以便在子類中隐藏父類的靜态方法(滿足覆寫限制),
- 而且Java虛拟機把靜态方法和所屬的類綁定,而把執行個體方法和所屬的執行個體綁定。
- 父類的非靜态方法不能被子類覆寫為靜态方法
- 父類的私有方法不能被子類覆寫
- 父類的抽象方法可以被子類通過兩種途徑覆寫(即實作和覆寫)
- 父類的非抽象方法可以被覆寫為抽象方法
package www.fengkai.jicheng;
class A{
public int a;
public int b;
public A(){
a = 1;
b = 2;
}
public void tell() {
System.out.println("a");
}
public void prin() {
System.out.println(a + " " + b);
}
}
class B extends A{
public B(){
a = 2;
b = 3;
}
public void tell() {
// super.tell();
System.out.println("b");
}
}
public class Test01 {
public static void main(String[] args) {
// TODO Auto-generated method stub
B b = new B();
b.tell();
b.prin();
}
}
定義兩個類A和B,B類繼承于A類,擁有A類中定義的變量和方法,而B類中的tell()方法就是對A類中的tell()方法的重寫;
super關鍵字可以強行調用父類的方法執行,上述代碼中,不注釋super.tell()的話就會輸出A類中的tell和B 類中的tell
- 父類的成員變量和方法為private使用super通路編譯出錯
- 在類的構造方法中,通過super語句調用這個類的父類的構造方法
- 在子類種通路父類的被屏蔽的方法和屬性
- 隻能在構造方法或執行個體方法内使用super關鍵字,而在靜态方法和靜态代碼塊内不能使用super