刚开始使用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);
}
}
这里声明onCreate()方法的目的是什么:
public void onCreate(Bundle savedInstanceState) {
然后使用super来调用onCreate()方法:
super.onCreate(savedInstanceState);
这是不是意味着您从Activity类而不是HelloAndroidActivity类调用onCreate()方法?如果是这样,在HelloAndroidActivity类中声明一个具有相同名称的方法有什么意义呢?
感谢您的任何澄清。
答案 0 :(得分:15)
在您的示例中,HelloAndroidActivity
是一个继承自Activity
的类。然后,您将覆盖基类(Activity
)的onCreate
方法。当您在派生类中使用与基类中的现有方法相同的签名定义方法时,会发生覆盖。这意味着当我在onCreate
的实例上调用HelloAndroidActivity
时,我将执行HelloAndroidActivity
版本,而不会基类(Activity
)的版本。
重写版本中的指令super.OnCreate(savedInstanceState)
是显式调用方法的基类版本。这意味着你希望HelloAndroidActivity.onCreate
首先执行基类的实现,然后再运行一些代码。
采用以下示例来说明此行为(假设方法Output
只是向屏幕输出内容):
1
class A
{
public void DoSomething()
{
Output("A");
}
}
在这种情况下,调用A.DoSomething()
将输出“A”。
2
假设我们仍然按上面定义的类A
和以下内容:
class B extends A
{
}
在这种情况下,调用B.DoSomething()
也会输出“A”。
3
假设我们仍然按上面定义了类A
,而是改为:
class B extends A
{
@Override
public void DoSomething()
{
Output("B");
}
}
现在,调用B.DoSomething()
将输出“B”。
4
假设我们仍然按上面定义的类A
,现在改为:
class B extends A
{
@Override
public void DoSomething()
{
super.DoSomething();
Output("B");
}
}
现在,调用B.DoSomething()
将输出“A”,然后输出“B”。
答案 1 :(得分:2)
您正在创建一个继承自Activity
的类;但你必须定义它的行为,所以你告诉你的类,在创建时,调用基类来完成所有必须完成的事情(super.onCreate()
),然后你设置你的布局来显示你的屏幕/应用程序( setContentView()
)。
还有一件事:看看@Override
之前定义的public void onCreate(Bundle savedInstanceState)
:覆盖意味着您扩展基本方法让您的派生类完成所有工作基础的,包括(后)你的逻辑。
答案 2 :(得分:2)
问题:在这里声明onCreate()方法的目的是什么? 答案:oncreate()方法类似于使用JAVA中的main(String args [])。您的Activity启动时会调用oncreate活动。所以所有的初始化都应该用这种方法完成。
您写道:公共类HelloAndroidActivity扩展活动 这意味着您正在创建一个类 - “HelloAndroidClass”,它继承自class =“Activity”。
您写道: super.onCreate(savedInstanceState); Java使用关键字“super”从父类调用构造函数。您正在使用覆盖的概念。运行代码时,将执行基类“HelloAndroidActivity”的oncreate方法,而不是父类的“Activity类”。
所以你的代码将首先运行oncreate()方法的基类实现(super.oncreate(...))然后执行派生类。
问题:在HelloAndroidActivity类中声明具有相同名称的方法有什么意义? 答案:super关键字用于初始化对象。重新声明相同方法并使用覆盖的重点是,您可以避免重写基类代码。
答案 3 :(得分:1)
onCreate
是普通Java中的main(String[] args)
函数。这是您设置代码的地方。
答案 4 :(得分:0)