免費論壇 繁體 | 簡體
Sclub交友聊天~加入聊天室當版主
分享
返回列表 回復 發帖

程式碼中的 @Override

原文

Android的開發者對@Override肯定是非常熟悉,不管是自己的代碼中還是書上都會出現,但是他是什麼意思呢?如下: 
@Override是偽代碼,表示重寫(當然不寫也可以),不過寫上有如下好處:  1、可以當註釋用,方便閱讀  2、編譯器可以給你驗證@Override下面的方法名是否是你父類中所有的,如果沒有則報錯比如你如果沒寫@Override而你下面的方法名又寫錯了,這時你的編譯器是可以通過的(它以為這個方法是你的子類中自己增加的方法)    
example:   
在重寫父類的onCreate時,在方法前面加上@Override系統可以幫你檢查方法的正確性。例如:   
publicvoidonCreate(BundlesavedInstanceState){…...}    
這種寫法是正確的,如果你寫成   
publicvoidoncreate(BundlesavedInstanceState){…...}    
這樣編譯器會報如下錯誤  
Themethodoncreate(Bundle)oftypeHelloWorldmustoverrideorimplementasupertypemethod,   
以確保你正確重寫onCreate方法。(因為oncreate應該為onCreate)   
而如果你不加@Override,則編譯器將不會檢測出錯誤,而是會認為你新定義了一個方法oncreate。   
現象: ... java: 1801: method does not override a method from its superclass @Override...
原因: Eclipse is defaulting to Java 1.5 and you have classes implementing interface methods
(which in Java 1.6 can be annotated with @Override, but in Java 1.5 can only be applied to methods overriding a superclass method). 就是說Java 1.5的編譯器默認對父類的方法進行覆蓋,採用@Override進行說明;但1.6已經擴展到對接口的方法;所以如果還是以Java 1.5的編譯器來編譯的話,會出現錯誤。 解決方案: Go to your project/ide preferences and set the java compiler level to 1.6 and also make sure you select JRE 1.6 to execute your program from eclipse. java的編譯器是1.6版本的,選擇編譯級別為1.6,但重要的一點是,選擇build的android庫是1.5的即可,生成的apk程序是可以在1.5內核上跑起來。
總的來講: android sdk的版本與Java JRE的版本可以配置起來用,兩者關係應該是疏鬆的,有高人可以指點錯誤。   1、Android裡有一些系統自動調用的回調函數CallbackMethods,如果寫的程序運行無錯,但是就是沒有該有的反應,那就可能是覆寫回調函數時沒有加@Override且函數名寫錯了。2、覆寫的函數最好加上@Override。3、可以在Source-> Override/Implement Methods下自動添加覆寫和接口函數,可以確保函數名拼寫正確。

----------------------------------------------------------------------------------
原文地址:http://hi.baidu.com/jangill/blog ... c603157af480db.html

http://hi.baidu.com/jangill/ihome/myblog

  Android的开发者对@Override肯定是非常熟悉,不管是自己的代码中还是书上都会出现,但是他是什么意思呢?如下:
  @Override是伪代码,表示重写(当然不写也可以),不过写上有如下好处:
    1、可以当注释用,方便阅读
    2、编译器可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错比如你如果没写@Override而你下面的方法名又写错了,这时你的编译器是可以通过的(它以为这个方法是你的子类中自己增加的方法)
  example:

  在重写父类的onCreate时,在方法前面加上@Override系统可以帮你检查方法的正确性。例如:

  public void onCreate(BundlesavedInstanceState){…….}
  这种写法是正确的,如果你写成
  public void oncreate(BundlesavedInstanceState){…….}
  这样编译器会报如下错误——
  The method oncreate(Bundle) of type HelloWorld must override or implement a super type method,
  以确保你正确重写onCreate方法。(因为oncreate应该为onCreate)
  而如果你不加@Override,则编译器将不会检测出错误,而是会认为你新定义了一个方法oncreate。
  


现象:

... java: 1801: method does not override a method from its superclass @Override...

原因:

Eclipse is defaulting to Java 1.5 and you have classes implementing interface methods (which in Java 1.6 can be annotated with @Override, but in Java 1.5 can only be applied to methods overriding a superclass method).

就是说Java 1.5的编译器默认对父类的方法进行覆盖,采用@Override进行说明;但1.6已经扩展到对接口的方法;所以如果还是以Java 1.5的编译器来编译的话,会出现错误。

解决方案:

Go to your project/ide preferences and set the java compiler level to 1.6 and also make sure you select JRE 1.6 to execute your program from eclipse.

java的编译器是1.6版本的,选择编译级别为1.6,但重要的一点是,选择build的android库是1.5的即可,生成的apk程序是可以在1.5内核上跑起来。

总的来讲: android sdk的版本与Java JRE的版本可以配置起来用,两者关系应该是疏松的,有高人可以指点错误。



1、Android里有一些系统自动调用的回调函数CallbackMethods,如果写的程序运行无错,但是就是没有该有的反应,那就可能是覆写回调函数时没有加@Override且函数名写错了。2、覆写的函数最好 加上@Override。3、可以在Source-> Override/Implement Methods下自动添加覆写和接口函数,可以确保函数名拼写正确。
返回列表