2016-06-27 4 views
-6

나는 android와 java에 익숙하지 않은데 왜 안드로이드에서 "this"키워드가 "super"가 아닌 가끔 사용되는지 이해하려고 머리를 터지게하지는 않습니까?android에서의 this와 super 키워드 사용법

"this"또는 "super"키워드없이 부모 메서드를 어떻게 호출 할 수 있습니까? 예를 들어

우리가

public class MainActivity extends ActionBarActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 

public void sendMessage(View view) { 
    Intent intent = new Intent(this, DisplayMessageActivity.class); 
    EditText editText = (EditText) findViewById(R.id.edit_message); 
    String message = editText.getText().toString(); 
    intent.putExtra(EXTRA_MESSAGE, message); 
    this.startActivity(intent); 
} 

우리는 그 위의 예에서 MainActivety 클래스는이 방법이 어떻게

public void setContentView(int layoutResID) { 
    this.getDelegate().setContentView(layoutResID); 
} 

로 ActionBarActivity에 정의되어 실제로 된 setContentView 방법이없는 볼 수 있습니다 말할 수 우리는 "이"또는 "최고"없이 그것을 부를 수 있습니까?

"this"infront는 부모 클래스에 정의되어 있지만 "this"키워드는 현재 범위/클래스를 의미합니다.

+0

하위 유형의 표현식은 항상 액세스 가능한 4 퍼 유형 메소드에 액세스 할 수 있습니다. –

+0

먼저 Java 설명서 (https://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html, https://docs.oracle.com/javase/tutorial/java/)를 살펴보십시오. IandI/super.html – Tyler

+0

또한 상속인 인 https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html – lucasvw

답변

1

어떻게 "this"또는 "super"키워드없이 부모 메소드를 호출 할 수 있습니까?

class A { 
    public void f() {} 
    public void h() {} 
    public void i() {} 
} 

class B extends A { 
    public void g() { f(); } // same as super.f() 
    public void h() { h(); /* recursive call */ } 
    public void i() { super.i(); /* call to inherited but "masked" */ } 
} 

어떻게 우리가 : super없이

당신이 할 수있는 당신이 전화를 명확하게해야 할 수도 재정의되는 경우 호출하는 방법은, "현재"클래스에서 재정의되지 않도록 제공 "this"또는 "super"없이 호출 할 수 있습니까?

this는 인스턴스 메서드에 something을 쓸 때, 그것은 this.something으로 읽기, 필수가 아닙니다. 따라서 앞의 예에서 h()은 재귀 호출입니다.

this은 범위가 지정되지 않았으므로 "전체"개체 자체를 나타냅니다. super 범위. this은 현재 클래스로 입력되고 super은 상위 클래스로 입력 된 오브젝트입니다.

0

자바에서는 필드에 액세스하거나 파생 클래스 또는 부모 클래스의 메서드를 호출 할 때마다 this을 명시 적으로 추가 할 필요가 없습니다. 클래스 확장은 기본적으로 완전히 새로운 유형을 만드는 동안 부모 클래스의 모든 속성을 상속한다는 것을 의미합니다. this 키워드는 MyClass 정의가 아닌 MyClass instance = new MyClass()을 통해 인스턴스화 할 때 생성 된 인스턴스를 참조합니다. 클래스 범위에 변수를 설정하려면 static field을 사용할 수 있습니다. 당신이 정의 된 지역 변수가있을 때

그러나, 방법 (void method(String startActivity){})의 인수는, 다음 로컬 정의가 this에서 정의에 대한 액세스 권한을 무시, 이에 대한 명시 적 this 키워드를 필요로하는 것 같이 말할 수 있습니다.

슈퍼 호출의 경우 Java에서 메서드를 재정의 할 때 super.<the method name>()을 사용하여 재정의 한 원래 메서드를 호출 할 수 있습니다. 이것은 수업에서 더 이상 원래 방법의 개념이 없기 때문에 필요합니다.