SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Android開発のためのJava SE再入門

Android開発におけるクラスのおさらいと主なメソッド

Android開発のためのJava SE再入門(2)

  • X ポスト
  • このエントリーをはてなブックマークに追加

HelloAndroid.javaとは

 HelloAndroid.javaは、以下のように、ごく短いソースコードですが、Java言語特有のキーワードが多く含まれていますので、Javaに不慣れな方には理解しにくいソースかもしれません。まずはこのファイルから、1行ずつソースを追いながら、文法的なキーワードを説明していくことにします。

リスト1 HelloAndroid.javaの一部
package codezine.androidjava.chap1;             // (1)

import android.app.Activity;                    // (2)
import android.os.Bundle;                       // (3)

public class HelloAndroid extends Activity {    // (4)

      ~中略~

}

パッケージとインポート(package、importキーワード)

  (1)行は、パッケージ(package)の宣言です。パッケージとは、複数のソースファイルをフォルダごとにまとめる機能です。まとめられたファイルの持つ意味が分かりやすくなり、またクラス名の衝突を避けることができます。

 (2)、(3)行は、インポート(import)宣言です。インポート宣言すると、他のパッケージにあるクラスなどを利用する際に、クラス名だけの省略した形で参照できるようになります。インポート宣言をしない場合、他のパッケージにあるクラスを指定するには、パッケージ名から記述します。

 android.app.Activity、android.os.Bundleは、それぞれAndroid SDKに含まれるandroid.appパッケージのActivityクラス、android.osパッケージのBundleクラス、という意味です。

クラス(classキーワード)

 (4)行めからはクラスのソースコードになりますが、とても短いコードになっています。なぜこれだけでよいのか、カラクリはおいおい説明することにして、まずはクラスの基礎からおさらいしましょう。

 オブジェクト指向言語であるJavaのプログラムは、クラスという単位で構成されています。オブジェクト指向では、この世界に存在するあらゆるものを抽象化して、それをオブジェクトという概念でとらえます。クラスは、そのオブジェクトをプログラムとして表現したもので、一連のデータと関連する処理をひとまとめに定義したものです。

 クラスのデータ部分をフィールドと呼び、変数や定数となります。また定義した処理をメソッドと呼びます。クラス定義の基本構文は、次のようになります。

[構文]クラス定義
アクセス修飾子 class クラス名 {
    アクセス修飾子 フィールド定義
    アクセス修飾子 メソッド定義
}

アクセス修飾子

 クラス定義にあるアクセス修飾子とは、外部からのアクセスを制御するための修飾子で、次のキーワードが指定可能です。

アクセス修飾子
アクセス修飾子 アクセス可能なもの
private 同じクラス
なし 同じパッケージ
protected 同じパッケージまたはサブクラス
public 任意のクラス

 アクセス修飾子は、オブジェクト指向の3つの概念の一つ、「カプセル化」を具現化するためのものです。カプセル化とは、クラス内の仕様や構造を外部から隠蔽し、外部に公開された手段でしかデータの操作を許さないようにすることです。クラスの独立性が高まることから、そのクラスをさまざなプログラムで再利用しやすくなります。

HelloAndroidクラスの定義

 では、あらためて(4)行めから定義しているHelloAndroidクラスを見てみましょう。

リスト2 HelloAndroid.javaの一部
public class HelloAndroid extends Activity {              // (4)
    /** Called when the activity is first created. */     // (5)
    @Override                                             // (6)
    public void onCreate(Bundle savedInstanceState) {     // (7)
        super.onCreate(savedInstanceState);               // (8)
        setContentView(R.layout.main);                    // (9)
    }
}

クラスの継承

 (4)は、extendsキーワードを使った継承になっています。Javaでは、定義したクラスを引き継いで、新しいクラスを作成(継承)できます。継承もオブジェクト指向の3つの概念の一つで、もとのクラスに新しく必要となるデータやメソッドを追加したり、メソッド内容を変更したりするものです。

 継承する、もとのクラスをスーパークラス親クラス、継承したクラスをサブクラス派生クラス) や子クラスと呼び、extendsキーワードを使って次のように定義します。

[構文]クラスの継承
class サブクラス名 extends スーパークラス名 {
    クラス定義
}

 つまり、HelloAndroidクラスは、Android SDKのandroid.appパッケージにあるActivityクラスを継承したサブクラスということです。また、アクセス修飾子にpublicを指定しているので、どのクラスからでも呼び出せます。

Activityクラス

 HelloAndroidクラスのもとになっているActivityクラスは、Android SDKで定義されているクラスで、Androidの「アクティビティ」を定義したクラスです。

 アクティビティとは、Androidアプリケーションの基本となるコンポートネントのことで、Windowsアプリケーションでいえばウインドウオブジェクトに相当します。通常は、ユーザーインターフェースとなる画面ごとに、Activityクラスのサブクラスを定義します。複数の画面を持つアプリケーションでは、複数のアクティビティから構成されます。

 Activityクラスのサブクラスは、Androidアプリケーションでは、少なくとも1つは必要となります。アプリケーションが起動されると、まず指定されたActivityサブクラスのオブジェクトが、Androidのフレームワークによって生成されます。

 アクティビティの基本処理は、Activityクラスですでに定義されています。従ってそれぞれのアプリケーションでは、Activityクラスを継承したサブクラスに、必要な部分のみ記述すればよい、ということになります。

オーバーライドアノテーション(@Overrideキーワード)

 (5)行はコメントですが、(6)行はそうではありません。このような@から始まるキーワードをアノテーション(注釈)と呼びます。アノテーションは、コメントと同様にプログラムの動作には影響を与えませんが、おもにコンパイラに情報を通知するために用います。

 (6)行の@Overrideは、オーバーライドアノテーションといい、@Overrideの直後に記述したメソッドが、オーバライドしたメソッドであることをコンパイラに通知します。

 オーバライドとは、クラスを継承した際に、スーパークラスで定義されたメソッドを、同じメソッド名と引数で上書きすることです。

 オーバライドの定義には、特別なキーワードは不要です。そのため、オーバライドのつもりがちょっとしたプログラマのミスで、異なるメソッドの定義になってしまうこともあります。そのようなミスを防ぐのに、(6)行の@Overrideキーワードは役に立ちます。@Overrideがあれば、引数などを間違えて、オーバライドになっていない場合には、エラーとして検出できます。

オーバーライドの意味

 (7)行からは、@Overrideが示すように、オーバーライドしたonCreateメソッドの定義で、ActivityクラスのonCreateメソッドの内容を上書きしています。

 オーバーライドの効能は、複数のサブクラスを定義した場合に、呼び出し方法を共通としたまま、特定のサブクラスのみ処理内容を変更することができる、というものです。

 従ってここでは、Activityクラスのサブクラスで共通のonCreateメソッドを、アプリケーション独自の処理に置き換えている、ということになります。

次のページ
onCreateメソッドを読み解く

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Android開発のためのJava SE再入門連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 高江 賢(タカエ ケン)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5995 2011/06/29 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング