トップ
トップ >  プログラミング言語 >  Java >  クラス
クラス
書式
[public] [abstract] [final] class クラス名 [extends スーパークラス] [implements インタフェース[,インタフェース]…]{
  [フィールド定義 | メソッド定義 | 内部クラス定義]…
}
項目説明
public
publicアクセス制限なしになります。ファイル名をクラス名.javaにする必要があります。
指定なし同一パッケージからのみアクセス可能になります。
通常はpublicを指定します。
abstract
指定あり抽象クラスになります。
指定なし具象クラスになります。
final指定するとこのクラスからサブクラスを指定できなくなります。
クラス名任意のクラス名を指定できます。ただし、予約語や定数は使用できません。
extends別のクラスのサブクラスにする場合に指定します。スーパークラスはひとつだけ指定できます。指定しない場合は自動的にObjectクラスのサブクラスになります。
implementsインタフェースを実装する場合に指定します。複数指定する場合はカンマで区切ります。
abstractとfinalは同時に指定できません。

フィールド定義
書式
[可視性] [static] [final] 型 フィールド名 [=初期値];
項目説明
可視性アクセス修飾子とも言います。
可視性説明
private同一クラスのみアクセスできます。
指定なしpackage protectedともいい、同一パッケージ内からアクセスできます。
protectedパッケージおよびサブクラスからアクセス可能です。
publicアクセス制限なしです。
static
指定ありクラスフィールドになります。
指定なしインスタンスフィールドになります。
final指定すると定数になります。finalを指定すると固定値となります。
型を指定します。
フィールド名任意のフィールド名です。ただし、予約語や定数は使用できません。
初期値初期値を設定すると、インスタンス生成時に指定した値で初期化されます。

解説
基本的にフィールドの可視性はprivateにします。
フィールドは初期値を設定しなくても以下のように自動的に初期化されます。
デフォルト値
booleanfalse
数値0
クラスnull

メソッド定義
書式
[可視性] [static] [final] 戻り値 メソッド名([引数の型 引数名[,引数の型 引数名]…]) [throws 例外クラス[,例外クラス]…]{
  処理
}
項目説明
可視性
可視性説明
private同一クラスのみアクセスできます。
指定なしpackage protectedともいい、同一パッケージ内からアクセスできます。
protectedパッケージおよびサブクラスからアクセス可能です。
publicアクセス制限なしです。
static指定するとクラスメソッドになります。 指定しないとインスタンスメソッドになります。
final指定するとサブクラスでオーバーライドできなくなります。
戻り値戻り値の型を指定します。戻り値がない場合はvoidを指定します。
メソッド名メソッド名は予約語や定数は使用できません。
引数引数の型と引数名を指定します。 複数ある場合、カンマで区切ります。 引数なしの場合()とします。
throwsスローする可能性のある例外を指定します。複数ある場合、カンマで区切ります。

解説
外部に公開するメソッドはpublicにします。
内部でしか使わない場合、protectedが妥当です。

可変長引数
書式
型... 変数名
型に続いて...(ピリオド3つ)を記述します。
メソッドの引数を可変にできます。
最後に1つだけ宣言できます。
メソッド内部では配列になります。
固定長引数と一致した場合は固定長優先になります。

オーバーライド
スーパークラスのメソッドを再定義することをオーバーライドと言います。 戻り値、引数、メソッド名が一致している必要があります。 以下の制約があります。
可視性スーパークラスと同等かそれ以上に広いこと
例外同一クラス、サブクラス、なしのいずれか

オーバーロード
引数が異なる同一名のメソッドを作ることです。
可視性、戻り値の型、throwsに制限はありません。

this
thisはクラスのインスタンスへの参照を表します。

super
superはクラスのスーパークラスを表します。

コンストラクタ
書式
可視性 クラス名([引数の型 引数名[,引数の型 引数名]…) [throws 例外クラス[,例外クラス]…]{
処理
}

メソッド名をクラス名と同一にします。

解説
コントラクタは特別なメソッドで、以下の特徴を有します。
呼び出しインスタンス生成時にコンストラクタが呼ばれます。
戻り値戻り値は指定しません。
コントラクタの目的は初期処理にあります。主にフィールドの初期化を行います。 他のメソッドと同じで、オーバーロード可能です。 スーパークラスがある場合は、スーパークラスのコンストラクタが先に呼ばれます。 さらに上のスーパークラスがある場合はスーパークラスをたどり、最上位のコンストラクタから呼ばれます。 これをコンストラクタチェーンと言います。 コンストラクタ内 他のコンストラクタ呼び出しはthis(); スーパークラスのコンストラクタsuper(); 一行目限定です。 スーパークラスに引数なしのコンストラクタがない場合、superは不要です。 returnは不要です。記述してもかまいません。 デフォルトコンストラクタ コンストラクタ定義がない場合、自動生成されます。

クラスの利用
インスタンスの生成
書式
new クラス名([引数 [,引数]…]);

記述例説明
A a = new A();
A a = new B();
A型の変数aにクラスAのインスタンスへの参照を代入しています。
A型の変数aにクラスBのインスタンスへの参照を代入しています。BがAのサブクラスか実装クラスである場合には正常です。

メソッドの呼び出し
書式
変数.メソッド名([引数 [,引数]…]);

記述例説明
a = b.m(p);
a = c.get().b.m(p);
new A().m();
bのメソッドmを呼び出し、戻り値を変数aに代入しています。
cのメソッドgetを呼び出し、その戻り値のメソッドmを呼び出しています。
クラスAのインスタンスを生成し、そのメソッドmを呼び出しています。

抽象クラス
解説
クラス定義で、abstractを指定すると抽象クラスになります。
抽象クラスは以下の特徴を持ちます。
インスタンスインスタンス生成は不可能です。
抽象メソッド抽象メソッドを定義できます。
サブクラス化サブクラス化されることを想定しています。

抽象メソッド
書式
[可視性] abstract 戻り値 メソッド名([引数の型 引数名[,引数の型 引数名]…]) [throws 例外クラス[,例外クラス]…];

解説
実装は記述しません。サブクラスでオーバーライドすることが必須になります。

インターフェース
概要
Javaに用意されているインターフェースの説明です。

書式
[public] interface インターフェース名 [extends スーパーインターフェース]{
  [メソッド宣言 | 定数]…
}

項目説明
public
指定ありアクセス制限なしになります。ファイル名をクラス名.javaにする必要があります。
指定なし同一パッケージからのみアクセス可能になります。
インターフェース名任意のインターフェース名を指定できます。ただし、予約語や定数は使用できません。
extends別のインターフェースのサブインターフェースにする場合に指定します。
メソッド宣言メソッドの宣言です。
定数自動的にstatic finalになります。

解説
単一継承において、多重継承のようなポリモーフィズムを実現する手段です。 Javaは単一継承しかサポートしないため、クラスは1つのスーパークラスしか持てません。 しかし、実際のプログラミングでは複数のクラスのサブクラスとしてポリモーフィズムを機能させたい場合がよくあります。 これを実現するために、インタフェースと呼ばれるものが用意されています。 クラスはインタフェースを複数実装することができます。 インタフェースは抽象クラスと似ていますが、 メソッドは自動的にpublicかつabstractになります。 定数を宣言できます。

クラスメソッド/クラスフィールド
クラスに関する情報をやりとりするのにクラスメソッドおよびクラスフィールドを使用します。
クラスメソッドからインスタンスメソッド、インスタンスフィールドへはアクセスできません。
インスタンスメソッドからクラスメソッド、クラスフィールドへはアクセス可能です。
宣言
static を指定します。

アクセス
クラス.メソッド
変数.メソッド
クラス.フィールド
変数.フィールド

staticイニシャライザ
クラス内のどのメソッドよりも先に呼び出されます。
クラスフィールドの初期化に使用します。
書式
static{
  処理
}
staticイニシャライザ内でエラーが発生するとExceptionInInitializerErrorがスローされます。
トップ >  プログラミング言語 >  Java >  クラス