方法重寫

方法重寫

  • 重寫都是方法的重寫,與屬性無關java

    父類的引用能夠指向子類,就是new一個子類的對象數據類型能夠寫爲父類,new子類是能夠指向父類的ide

    重寫的快捷鍵:Alt+insert函數

    對靜態方法調用的時候,調用的方法只和定義的參數類型有關,但對非靜態方法調用的時候,調用的方法都是new了的對象的方法指針

  • 靜態方法和非靜態方法的區別很大,不要隨意去寫靜態方法code

    重寫是對非靜態方法的,沒有靜態方法的重寫(目前死記)對象

  • 子類重寫了父類的方法,父類原來的那個方法就不能被調用了繼承

注意:io

  1. 重寫須要有繼承關係,子類重寫父類的方法
  2. 方法名必須相同
  3. 參數列表必須相同
  4. 修飾符:範圍能夠擴大但不能縮小 public>protected>default>private
  5. 拋出的異常:範圍能夠縮小,但不能擴大:ClassNotFoundException -->Exception(大)
  6. 子類的方法和父類必須一致,但方法體不一樣

爲何要重寫:編譯

  1. 父類的功能子類不必定須要,或不必定知足
  2. 快捷鍵:Alt+insert:override

理解:class

靜態方法屬於靜態綁定,在編譯階段已經肯定函數名和地址,靜態方法固然是能夠被繼承的,可是卻不能被重寫,爲何那? 由於重寫的意思是從新定義父類的虛函數,可是虛函數是動態綁定的,而靜態方法是靜態綁定的,因此靜態函數必然不能是虛函數,也就不存在所說的重寫了.你在子類中從新寫一個同名的函數,覆蓋了父類的同名函數,在使用子類指針進行調用的時候,調用的就是子類的這個靜態方法

例如:

//父類
public class b {
    public void test(){
        System.out.println("b");
    }
}
//子類
public class a extends b{
    @Override //註解:有功能的註釋
    public void test() {
        System.out.println("a");
    }
}
//執行類
public class zhixing {
    public static void main(String[] args) {
        a a = new a();
        a.test();//輸出的就是a了,由於子類重寫了父類,就至關於從新改寫了父類,重寫後就掉不到父類的那個方法了
    }
}
相關文章
相關標籤/搜索