2011-09-09 9 views
4

Android開発とJavaを使い始めたばかりです。「Hello World」Androidチュートリアルに関するNoob

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()メソッド宣言の目的は何ですか:ここのonCreate()メソッドを呼び出すためにスーパーを使用して次に

public void onCreate(Bundle savedInstanceState) { 

をだから、ここで私が働いているコードです。

super.onCreate(savedInstanceState); 

これを使用すると、Activityクラスではなく、HelloAndroidActivityクラスからのonCreate()メソッドを呼び出していることを意味しませんか?もしそうなら、HelloAndroidActivityクラスに同じ名前のメソッドを宣言するのは何ですか?

ありがとうございます。

答えて

1

onCreateは、通常のJavaの場合はmain(String[] args)の機能です。それはあなたのコードを設定する場所です。 onCreateメソッドのドキュメントから

+0

ああ、それは私が行方不明だったもので、今や意味をなさない。ありがとうございました! – Axl

2

Activityから継承するクラスを作成しています。その動作を定義する必要があるため、作成したクラスに基本クラスを呼び出して実行する必要があるすべての作業を完了したら、画面/アプリ(setContentView())を表示するようにレイアウトを設定します。

一つのことより:右public void onCreate(Bundle savedInstanceState)前に定義された@Overrideを見てみましょう:オーバーライドはあなたがあなたの派生クラスは、(後に)あなたのロジックを含むベース1、すべての仕事をやらせるために基本メソッドを拡張していることを意味します。

0

派生クラスは、このメソッドのスーパークラスの実装を通じ呼び出す必要があります。そうでない場合、例外がスローされます。

など、活動の方法のためのライフサイクルをhereさらに見る

15

あなたの例では、HelloAndroidActivityActivityから継承するクラスです。次に、基本クラス(Activity)のonCreateメソッドをオーバーライドします。オーバーライドは、基本クラスの既存のメソッドと同じシグニチャを持つ派生クラスのメソッドを定義するときに発生します。これは、HelloAndroidActivityのインスタンスでonCreateを呼び出すと、HelloAndroidActivityバージョンを実行し、ではなく、のベースクラス(Activity)のバージョンを実行することを意味します。

オーバーライドされたバージョンのsuper.OnCreate(savedInstanceState)命令は、メソッドの基本クラスのバージョンを明示的に呼び出すです。これは、HelloAndroidActivity.onCreateが最初に基本クラスの実装を実行してから、さらにコードを実行することを意味します。

1:


は(単に画面に何かを出力Output方法を想定)、この動作を説明するために、以下の例を取ります。

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" 。

+0

@lc:あなたの答えは本当に良いです...しかし、あなたが見ることができるように、onCreateはmain()関数の一種であることをOPが知りませんでした。私はコードを書く前に、人々はいくつかの基本的なマニュアルや記事を読む必要があると思います...あなたは思いませんか? – Marco

+0

わかりやすい例をありがとう! @Overrideは少しでも私を投げていました。なぜなら、onCreateは典型的なJavaコードではmain()のようなものなので、Hello Worldチュートリアルのような単純なものでは冗長性を理解できませんでしたが、今。 – Axl

+1

@Marco、私は一晩中developer.android.comのドキュメントを読んできましたが、「Javaでコーディングするのに慣れていたら、 )メソッドを使用しています。Androidの世界では、代わりにonCreate()を使用しています。とにかく、お返事いただきありがとうございました。彼らはとても役に立ちました。 – Axl

2

質問:ここでonCreate()メソッドを宣言する目的は何ですか? 答え:oncreate()メソッドは、ususal JAVAのmain(String args [])に似ています。 oncreateアクティビティは、アクティビティが開始されるときに呼び出されます。したがって、このメソッドではすべての初期化を行う必要があります。あなたが書く

: - クラス=「活動」を継承する「HelloAndroidClassを」publicクラスHelloAndroidActivityアクティビティ を拡張これは、クラスを作成していることを意味します。

あなたは書いています:super.onCreate(savedInstanceState); Javaでは、親クラスからコンストラクタを呼び出すためにキーワード "super"が使用されます。あなたはここでの上書きの概念を使用しています。コードを実行すると、基本クラス "HelloAndroidActivity"のoncreateメソッドが実行され、親クラスの "Activityクラス"のonCreateメソッドは実行されません。

だからコードは、最初のOnCreate()メソッド(super.oncreate(...))、その後、派生クラスの実装の基本クラスの実装を実行します。

質問:HelloAndroidActivityクラスに同じ名前のメソッドを宣言する際のポイントは何ですか? 回答:スーパーキーワードを使用してオブジェクトを初期化しています。同じメソッドを再宣言し、上書きを使用する点は、基本クラスのコードを書き直すことから保存されていることです。