Noob关于"Hello World"Android教程的问题

Axl*_*Axl 4 android

刚刚开始使用Android开发和Java.所以,这是我正在使用的代码:

package com.example.helloandroid;

import android.app.Activity;
import android.os.Bundle;

public class HelloAndroidActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}
Run Code Online (Sandbox Code Playgroud)

这里声明onCreate()方法的目的是什么:

public void onCreate(Bundle savedInstanceState) {
Run Code Online (Sandbox Code Playgroud)

然后使用super在这里调用onCreate()方法:

super.onCreate(savedInstanceState);
Run Code Online (Sandbox Code Playgroud)

这是不是意味着你从Activity类而不是HelloAndroidActivity类调用onCreate()方法?如果是这样,在HelloAndroidActivity类中声明具有相同名称的方法有什么意义?

谢谢你的任何澄清.

lc.*_*lc. 15

在您的示例中,HelloAndroidActivity是一个继承自的类Activity.然后,您将覆盖基类(Activity)的onCreate方法.当您在派生类中使用与基类中的现有方法相同的签名定义方法时,会发生覆盖.这意味着当我调用onCreate一个实例时HelloAndroidActivity,我将执行该HelloAndroidActivity版本,而不是基类(Activity)的版本.

super.OnCreate(savedInstanceState)重写版本中的指令显式调用基类的方法版本.这意味着你想HelloAndroidActivity.onCreate先执行基类的实现,然后再运行一些代码.


以下示例来说明此行为(假设该方法Output只是向屏幕输出内容):

1.

class A
{
    public void DoSomething()
    {
        Output("A");
    }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,调用A.DoSomething()将输出"A".


2.

假设我们仍然具有A上面定义的类,以及以下内容:

class B extends A
{
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,调用B.DoSomething()也将输出"A".


3.

假设我们仍然具有A上面定义的类,而是以下内容:

class B extends A
{
    @Override
    public void DoSomething()
    {
        Output("B");
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,调用B.DoSomething()将输出"B".


4.

假设我们仍然A按上面定义的类,现在改为:

class B extends A
{
    @Override
    public void DoSomething()
    {
        super.DoSomething();
        Output("B");
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,调用B.DoSomething()将输出"A"然后输出"B".