方法重寫
-
重寫都是方法的重寫,與屬性無關
父類的參考可以指向子類,就是new一個子類的物件資料型別可以寫為父類,new子類是可以指向父類的
重寫的快捷鍵:Alt+insert
對靜態方法呼叫的時候,呼叫的方法只和定義的引數型別有關,但對非靜態方法呼叫的時候,呼叫的方法都是new了的物件的方法
-
靜態方法和非靜態方法的區別很大,不要隨意去寫靜態方法
重寫是對非靜態方法的,沒有靜態方法的重寫(目前死記)
-
子類重寫了父類的方法,父類原來的那個方法就不能被呼叫了
注意:
- 重寫需要有繼承關系,子類重寫父類的方法
- 方法名必須相同
- 引數串列必須相同
- 修飾符:范圍可以擴大但不能縮小 public>protected>default>private
- 拋出的例外:范圍可以縮小,但不能擴大:ClassNotFoundException -->Exception(大)
- 子類的方法和父類必須一致,但方法體不同
為什么要重寫:
- 父類的功能子類不一定需要,或不一定滿足
- 快捷鍵:Alt+insert:override
理解:
靜態方法屬于靜態系結,在編譯階段已經確定函式名和地址,靜態方法當然是可以被繼承的,但是卻不能被重寫,為什么那? 因為重寫的意思是重新定義父類的虛函式,但是虛函式是動態系結的,而靜態方法是靜態系結的,所以靜態函式必然不能是虛函式,也就不存在所說的重寫了.你在子類中重新寫一個同名的函式,覆寫了父類的同名函式,在使用子類指標進行呼叫的時候,呼叫的就是子類的這個靜態方法
例如:
//父類
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了,因為子類重寫了父類,就相當于重新改寫了父類,重寫后就掉不到父類的那個方法了
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/255822.html
標籤:Java
