这个和Android中的超级关键字用法

时间:2016-06-27 17:47:54

标签: java android inheritance

我是android和java的新手,我无法理解为什么在android“this”关键字有时会使用而不是“超级”?

另外,如何在没有“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类没有setContentView方法,实际上这个方法在ActionBarActivity中被定义为

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

那么我们如何能够在没有“this”或“super”的情况下调用它?

如果我们将“this”放在前面,为什么它仍然有效,尽管在父类中定义的方法不是“this”关键字意味着当前范围/类。

2 个答案:

答案 0 :(得分:1)

  

如果没有"这个"如何调用父方法?或"超级"关键字?

如果没有super您可以在"当前"中重新定义您调用的方法,则可以class,如果重新定义,则可能需要消除呼叫的歧义:

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" */ }
}
  

我们怎么能在没有"这个"或"超级"?

this不是必需的,当您在实例方法中编写something时,它将被读取为this.something。这就是为什么在前面的例子中,调用h()是一个递归的。

this没有范围,它表示"完整"对象本身。 super范围如下。使用当前类输入thissuper是作为其父类输入的对象。

答案 1 :(得分:0)

在Java中,您不必在每次要访问字段时显式添加this,也不必在派生类父类中调用方法。扩展类基本上意味着继承父类的所有属性,同时创建一个全新的类型。 this关键字是指通过MyClass instance = new MyClass()实例化时创建的实例,而不是MyClass定义。如果要在类范围上设置变量,可以使用static field

但是,如果定义了局部变量,可以说作为方法(void method(String startActivity){})的参数,那么该本地定义将覆盖对this中定义的访问,因此需要明确this关键字。

对于超级调用,当您在Java中覆盖方法时,可以使用super.<the method name>()调用已覆盖的原始方法。这是必要的,因为在课堂上不再有原始方法的概念。