构建意图时“这个”是指什么

时间:2015-12-17 08:13:41

标签: java android

我刚开始学习Android并在google android网站上学习教程。

在我正在进行的教程中,我正在建立一个开始另一项活动的意图。

com.mycompany.myfirstapp;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;   
public class MyActivity extends AppCompatActivity {
    /**Called when the user clicks the Send button**/
    public void sendMessage(View view) {
        //Do something in response to button
        Intent intent = new Intent(this, DisplayMessageActivity.class);
    }
}

教程说“将Context作为其第一个参数(因为Activity类是Context的子类,所以使用它)。”

我想这个解释应该足够明确,但我不明白。

我理解的是,sendMessage方法中的'this'是指当前类,因此用作当前类的实例变量,即MyActivity。

这是真的吗?

如果这是真的,那么它的类型是活动?哪个又是Context的子类?

我不明白为什么'this'的类型是Activity。 请为我解释一下。 谢谢。

3 个答案:

答案 0 :(得分:5)

  

我的理解是sendMessage方法中的'this'是指当前类,因此用作当前类的实例变量。这是真的?

正确。

  

如果这是真的,那么它的类型是活动?

它的类型是MyActivity,它延伸(间接)Activity,所以你可以在这里传递它。

  

又是Context的子类?

正确。

MyActivity扩展AppCompatActivity扩展FragmentActivity扩展Activity扩展Context(省略某些步骤)。因此,只要您需要Context实例,就可以传递Activity实例,这就是继承的工作方式。

修改 ClassActivity不一样。 Activity是Android SDK的一个类。类就像一个模板,可用于创建新对象的实例。 Intent的构造函数要求您在其第一个参数中传递Context的实例。 MyActivity扩展了Context,因此您可以在MyActivity的costructor中传递Intent的实例。方法内的this保存对当前对象的引用。

答案 1 :(得分:2)

是的,this是当前类的实例(在您的情况下为MyActivity)。当Activity正在扩展AppCompatActivity时,它也扩展了所有父母:

    android.content.Context
   ↳    android.content.ContextWrapper
       ↳    android.view.ContextThemeWrapper
           ↳    android.app.Activity
               ↳    android.support.v4.app.FragmentActivity
                   ↳    android.support.v7.app.AppCompatActivity

答案 2 :(得分:0)

thisActivity的一个实例,因为这是AppCompatActivity扩展的内容。

有待进一步参考,请参阅: http://developer.android.com/reference/android/support/v7/app/AppCompatActivity.html