2014-03-02 115 views
0

如果我的班級延伸Activity並實施SensorEventListener,哪一個將this參考 - ActivitySensorEventListener?或兩者? 非常感謝。哪一個「這個」是指?

public class MainActivity extends Activity implements SensorEventListener 
+1

我建議你閱讀關於Polymorphism。 http://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html – dgimenes

回答

2

this指的是類的當前實例。 implements是一個接口,所以this永遠不能指向那個。您不能創建接口的實例,只能創建類的實例。 ActivityMainActivity的超類,也沒有它的實例。實例將是MainActivity

然而,雖然這是一個有點意義的,你可以投this所有的MainActivityActivitySensorEventListener沒有任何問題。

+0

謝謝?爲什麼我可以將其轉換爲SensorEventListener? –

+1

你總是可以轉換爲由你的類實現的超類和接口。所以,假設您有另一個需要在其構造函數中使用'SensorEventListener'的類。您可以傳入任何實現了'SensorEventListener'的類,但需要'SensorEventListener'的類不知道您傳入了MainActivity,因此它只能調用SensorEventListener接口中該對象上的方法。正如@dgimenes – SDJMcHattie

+1

提到的那樣,多晶現象就是這樣的。實際上,這正是幾乎每次爲視圖或訪問LayoutInflater需要「上下文」時發生的情況。因爲Activity是Context的子子類,所以它幾乎總是作爲Context傳入Activity,所以它可以被稱爲Context – SDJMcHattie

2

this將把MainActivity這將是

當然,如果你「改變大賽」,並期待的Activity實例的類的實例:在這種情況下this可以指Activity但看你的問題,答案肯定是MainActivity

1

this關鍵字代表當前活動或類或對象。

例如

private int number; 

public example(int number) { 
    this.number = number; 
} 

這裏,this.number代表私人int數字變量,number代表方法int數字。

另一個例子是(其同在Java)

class example implements ActionListener{ 
public static void main(String[] args) 
{ 
    JButton button = new JButton(); 
    button.addActionListener(this); 
} 

} 

既然你已經實現了動作監聽類/項目當你輸入這個,它會調用動作監聽庫。