2011-06-19 38 views
0

我正在製作一個Android應用程序,並且我有一些按鈕。 我想爲它們添加一些監聽器,所以我實現了android.view.View.OnClickListener,並將監聽器添加到按鈕中。爲什麼不能告訴編譯器重寫onClick

然而,在onClick方法,我不能添加Override註釋是這樣的:

@Override 
public void onClick(View view) { /* With Override */ } 

但這個工程:

public void onClick(View view) { /* Without Override */ } 

如果我嘗試在後者記錄的東西onClick方法,它按預期工作。

我使用Eclipse,它一直告訴我,我必須重寫超類方法。

爲什麼我不能將Override註釋添加到它,如果我重寫它?

我使用的是Ubuntu 11.4,如果有問題的話。 java -version返回:

java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02, mixed mode)

下面是代碼:

import android.view.View.OnClickListener; 

public class Main extends Activity implements OnClickListener { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.main); 

     Button btnFoo = (Button) findViewById(R.id.btnFoo); 
     btnFoo.setOnClickListener(this); 
    } 

    // @Override 
    public void onClick(View v) { 
     Log.e("foo", "bar"); 
    } 
} 

PS。我使用Sun JDK 1.6

編輯:

我發現這適用於大多數的我試圖使用的方法,e.g public void run()(從Runnable)。

+0

爲什麼*不能*添加它?如果你這樣做,會出現什麼問題? – Pit

+0

正如我寫的:*我使用Eclipse,並一直告訴我,我必須重寫超類方法。* – whirlwin

+0

哦,對不起。我明白你錯了。 – Pit

回答

0

您可以嘗試將java sdk版本更改爲1.6並將修復它

2

因爲沒有什麼可以重寫,所以你正在實現一個接口,而不是從一個已經定義了該方法的超類中繼承。 它根本沒有意義。

+6

將@Override註釋與接口一起使用應該適用於Java 1.6。就其說法而言,它實現了相同的目的:「我試圖使用與其他方法相同的簽名 - 請檢查我是否正確地執行了此操作。」 –

+0

回想一下我之前做過的一個Android應用程序,我使用了問題中描述的註釋,所以很明顯可以像Jon解釋的那樣。 – whirlwin

相關問題