1. 程式人生 > >Java @Override註解 寫與不寫的區別

Java @Override註解 寫與不寫的區別

/*
    一般來說,寫與不寫沒什麼區別,JVM可以自識別 
  寫的情況下:即說明子類要覆蓋基類的方法,基類必須存在方法 (控制型別public,protected,返回值,引數列表型別)與子類方法完成一致的方法,否則會報錯(找不到被Override的方法)。  
  在不寫@Override註解的情況下,當基類存在與子類各種條件都符合的方法時實現覆蓋;如果條件不符合時,則是當成新定義的方法使用。 
 所以如果想覆蓋基類方法時,最好還是寫上@Override註解,這樣有利於編譯器幫助檢查錯誤 
*/  
//示例:  
  class Test{  
     public void t(String s){  
         System.out.println("Test.t(String):" + s);  
       }  
     public void t2(int i){  
         System.out.println("Test.t2(int):" + i);      
       }  
     public void t3(){  
         t("override");    
       }  
 }  
11.public class OverrideTest extends Test{  
12.    @Override//此處寫與不寫都能覆蓋基類的t(String)方法  
13.    public void t(String s){  
14.        System.out.println("OverrideTest.t(String):" + s);  
15.    }  
16.    //此處不能寫@Override註解,因為方法引數型別與基類的t2方法的引數型別不同  
17.    //所以此處只能新定義了一個t2(float)方法,並不能實現覆蓋  
18.    public void t2(float f){  
19.        System.out.println("OverrideTest.t2(float):" + f);  
20.    }  
21.    public static void main(String[] args){  
22.        OverrideTest ot = new OverrideTest();  
23.        ot.t("china34420");  
24.        ot.t2(1.0f);  
25.        ot.t2(1);  
26.        ot.t3();  
27.    }  
28.}  
29./*輸出: 
30.    OverrideTest.t(String):china34420 
31.    OverrideTest.t2(float):1.0 
32.    Test.t2(int):1 
33.    OverrideTest.t(String):override 
34.*/  
35.