2014-03-02 5 views
0

내 수업이 Activity으로 확장되고 SensorEventListener을 구현하는 경우 어느 것이 this입니까? Activity 또는 SensorEventListener을 참조 하시겠습니까? 아니면 둘다? 고마워요."this"가 참조하는 것은 어느 것입니까?

public class MainActivity extends Activity implements SensorEventListener 
+1

당신은 Polimorphism에 관해 읽을 것을 제안합니다. http://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html – dgimenes

답변

2

this 클래스의 현재 인스턴스를 말합니다. implements은 인터페이스 용이므로 this은이를 참조 할 수 없습니다. 클래스의 인스턴스 만 만들 수는 없습니다. ActivityMainActivity의 수퍼 클래스이며 인스턴스가 만들어지지 않았습니다. 인스턴스이 조금 무의미하지만, 당신은 아무 문제없이 MainActivity, Activity 또는 SensorEventListener의 모든 this 캐스팅 할 수 MainActivity 그러나

이 될 것입니다.

+0

고마워요? 왜 이것을 SensorEventListener로 전송할 수 있습니까? –

+1

클래스에 의해 구현 된 수퍼 클래스와 인터페이스로 항상 캐스트 할 수 있습니다. 그래서 생성자에'SensorEventListener'가 필요한 다른 클래스가 있다고 가정 해 봅시다. 당신은'SensorEventListener'를 구현하는 클래스를 넘겨 줄 수 있습니다 만,'SensorEventListener'를 필요로하는 클래스는 MainActivity를 전달했다는 것을 모르기 때문에'SensorEventListener' 인터페이스에있는 그 객체의 메소드 만 호출 할 수 있습니다. 그것이 다형성이 @dgimenes에 의해 언급 된 것과 같습니다. – SDJMcHattie

+1

사실, 이것은 정확히 View에 대한 'Context'가 필요하거나 LayoutInflater에 액세스 할 때마다 발생합니다. 액티비티는 Context의 하위 하위 클래스이므로 컨텍스트로 참조 될 수 있으므로 거의 항상 컨텍스트로 액티비티를 전달합니다. – SDJMcHattie

2

this는 "대회를 변경"과 Activity의 인스턴스로 보면 물론

클래스의 인스턴스가 될 것 MainActivity를 참조한다 :이 경우 this에이 Activity을 참조 할 수 있지만, 귀하의 질문을 찾고, 답변은 확실히 MainActivity

1

this 키워드는 현재 활동이나 클래스 또는 개체를 나타냅니다.

private int number; 

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

여기에서 this.number는 private int number 변수를 나타내며 number는 메소드 int number를 나타냅니다.

또 다른 예는 당신이 입력 할 때 클래스/프로젝트에 액션 청취자를 구현 한 이후

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

} 

(자바로 그 같은) 것, 그것은 액션 청취자 라이브러리를 호출합니다.

관련 문제