1. Top
  2. Java SE
  3. クラス

クラス

クラス宣言


class クラス名 { クラス本体 }

【クラス宣言時に付与できる修飾子】※修飾子は上から宣言する順に並んでいます。
修飾子
説明
public
他のどのクラスからも宣言されたクラスを使用できることを表します。publicがない場合は同じパッケージ中のクラスからしか使用できないことを表します。
abstract
abstractは宣言されたクラスからインスタンスを生成できないことを表します。詳細はabstractを参照してください。
final
finalは宣言されたクラスのサブクラスを作れないことを表します。詳細はfinalを参照してください。
class クラス名
クラス宣言における必須要素です。クラスの宣言とそのクラス名を表します。
extends スーパークラス名
スーパークラスのサブクラスとしてクラスを宣言することを表します。extendsの説明は次項で詳しく行います。
implements インターフェース名
宣言されたインターフェースをクラスが実装することを表します。詳細はインタフェースの実装を参照してください。



ページの先頭へ

クラス継承

オブジェクト指向プログラミングの最も重要な機能の1つは、継承であるといっても良いでしょう。既存のクラスはスーパークラスと呼ばれ、スーパークラスの機能を引き継いで新規に生成されるクラスはサブクラスと呼ばれます。

継承はスーパークラスのメソッドと変数が新しいサブクラスにも引き継がれるものです。したがって、サブクラスではスーパークラスに無い属性や操作を実装すれば良いだけになりますのでソフトウェア開発の効率化となります。

あるクラスを継承して新たなクラスを作るには以下のように記述します。

修飾子 class クラス名 extends スーパークラス名

サブクラスは、スーパークラスの変数とメソッドを引き継ぐので、それらを宣言することなく使用することが出来ます。また直接のスーパークラスだけではなく、スーパークラスのスーパークラスのメンバも引き継ぐことができます。

又、スーパークラスで定義されていない変数やメソッドをサブクラスで宣言することもできる。更に、スーパークラスで定義されているメソッドの処理内容を変更し、同じ名前、引数、戻り値を持つメソッドとして再定義することが出来ます。これをオーバーライド(後述)と呼びます。



ページの先頭へ

クラスの構成要素

Javaでクラスを作成する上でメンバ変数、メソッド、コンストラクタが主要な構成要素となります。
その他、パッケージ、インタフェースなど他の構成要素もありますが、ここでは説明を簡略化するため、他の構成要素についての説明は省略します。

・メンバ変数
オブジェクトが持っている状態を表します。この他変数としてはメソッド内だけで有効なローカル変数もあります。

・メソッド
オブジェクトが持っている振る舞いを表します。

・コンストラクタ
クラスからオブジェクトが生成される時に実行される初期化処理を担います。



ページの先頭へ

アクセスレベル

アクセスレベルを指定することにより他のクラスから自クラスのメンバ変数にアクセスさせないなどを指定することができます。


アクセスレベルの種類

構成要素ごとの指定できるアクセスレベルを以下の表に記載します。
クラス宣言時に指定できるアクセスレベルは「public」と「指定無し(デフォルト)」のみです。
アクセスレベル
クラス
メンバ変数
メソッド
コンストラクタ
public
protected
×
指定無し(default)
private
×



アクセスレベルの使用方法

アクセスレベル
同一クラス
同一パッケージ
サブクラス
すべて
public
protected
×
指定無し(default)
×
×
private
×
×
×



ページの先頭へ

オーバーライド

オーバーライドとは、スーパークラスから継承したメソッドをサブクラスで再定義することです。オーバーライドを行なうためには以下の条件を満たす必要があります。
このオーバーライドによって Javaではオブジェクト指向で非常に重要な機能であるポリモーフィズム(多態性)を実現することが出来ます。

・スーパークラスのメソッドとシグネチャが同じであること
・スーパークラスのメソッドと戻り値型が同じであること

【例】オーバーライドを行った例です。
class ExClass {
    // オーバーライドされるメソッド
    void methodA(int i) {
        int x = i * 2;
    }
}

class subExClass extends ExClass {
    // オーバーライドするメソッド
    void methodA(int i) {
        int x = i * 10;
      System.out.println(x);
    }

    public static void main(String[] args) {
        subExClass objectSub = new subExClass();
        objectSub.methodA(10);
    }
}

【実行結果】
100


ページの先頭へ

オーバーロード

オーバーロードとは同一クラス内でメソッド名が同一で引数の型、数、並び順が異なるメソッドを複数定義することを言います。

オーバーロードを定義する際には以下の規定があります。
1. 異なるメソッドと認識される部分は、メソッドの次の個所です。「引数の型」、「引数の数」、「引数の並び順」。
2. 次の個所が異なっていても異なるメソッドとは認識されません。コンパイルエラーとなります。「戻り型」、「アクセスレベル」、「引数名」、「throws節」。

【例】オーバーロードを行った例です。
class ExClass{
    // 引数を2つ持つtorokuメソッド
    void toroku(String name, String country) {
        System.out.println("名前は" + name);
        System.out.println("国は" + country);
    }

    // 引数を1つ持つtorokuメソッド
    void toroku(String name) {
        System.out.println("名前は" + name);
        System.out.println("国は" + "日本");
    }

    public static void main(String[] args) {
        ExClass obj = new ExClass();
        obj.toroku("Java太郎");   
    }
}


【実行結果】
名前はJava太郎 
国は日本




ページの先頭へ