クラス
書式
[public] [abstract] [final] class クラス名 [extends スーパークラス] [implements インタフェース[,インタフェース]…]{
[フィールド定義 | メソッド定義 | 内部クラス定義]…
}
abstractとfinalは同時に指定できません。
[フィールド定義 | メソッド定義 | 内部クラス定義]…
}
項目 | 説明 | ||||
public |
| ||||
abstract |
| ||||
final | 指定するとこのクラスからサブクラスを指定できなくなります。 | ||||
クラス名 | 任意のクラス名を指定できます。ただし、予約語や定数は使用できません。 | ||||
extends | 別のクラスのサブクラスにする場合に指定します。スーパークラスはひとつだけ指定できます。指定しない場合は自動的にObjectクラスのサブクラスになります。 | ||||
implements | インタフェースを実装する場合に指定します。複数指定する場合はカンマで区切ります。 |
フィールド定義
書式
解説
[可視性] [static] [final] 型 フィールド名 [=初期値];
項目 | 説明 | ||||||||||
可視性 | アクセス修飾子とも言います。
| ||||||||||
static |
| ||||||||||
final | 指定すると定数になります。finalを指定すると固定値となります。 | ||||||||||
型 | 型を指定します。 | ||||||||||
フィールド名 | 任意のフィールド名です。ただし、予約語や定数は使用できません。 | ||||||||||
初期値 | 初期値を設定すると、インスタンス生成時に指定した値で初期化されます。 |
解説
基本的にフィールドの可視性はprivateにします。
フィールドは初期値を設定しなくても以下のように自動的に初期化されます。
フィールドは初期値を設定しなくても以下のように自動的に初期化されます。
型 | デフォルト値 |
boolean | false |
数値 | 0 |
クラス | null |
メソッド定義
書式
解説
[可視性] [static] [final] 戻り値 メソッド名([引数の型 引数名[,引数の型 引数名]…]) [throws 例外クラス[,例外クラス]…]{
処理
}
処理
}
項目 | 説明 | ||||||||||
可視性 |
| ||||||||||
static | 指定するとクラスメソッドになります。 指定しないとインスタンスメソッドになります。 | ||||||||||
final | 指定するとサブクラスでオーバーライドできなくなります。 | ||||||||||
戻り値 | 戻り値の型を指定します。戻り値がない場合はvoidを指定します。 | ||||||||||
メソッド名 | メソッド名は予約語や定数は使用できません。 | ||||||||||
引数 | 引数の型と引数名を指定します。 複数ある場合、カンマで区切ります。 引数なしの場合()とします。 | ||||||||||
throws | スローする可能性のある例外を指定します。複数ある場合、カンマで区切ります。 |
解説
外部に公開するメソッドはpublicにします。
内部でしか使わない場合、protectedが妥当です。
内部でしか使わない場合、protectedが妥当です。
可変長引数
書式
最後に1つだけ宣言できます。
メソッド内部では配列になります。
固定長引数と一致した場合は固定長優先になります。
型... 変数名
型に続いて...(ピリオド3つ)を記述します。
メソッドの引数を可変にできます。型に続いて...(ピリオド3つ)を記述します。
最後に1つだけ宣言できます。
メソッド内部では配列になります。
固定長引数と一致した場合は固定長優先になります。
オーバーライド
スーパークラスのメソッドを再定義することをオーバーライドと言います。
戻り値、引数、メソッド名が一致している必要があります。
以下の制約があります。
可視性 | スーパークラスと同等かそれ以上に広いこと |
例外 | 同一クラス、サブクラス、なしのいずれか |
オーバーロード
引数が異なる同一名のメソッドを作ることです。
可視性、戻り値の型、throwsに制限はありません。
可視性、戻り値の型、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 |
|
||||
インターフェース名 | 任意のインターフェース名を指定できます。ただし、予約語や定数は使用できません。 | ||||
extends | 別のインターフェースのサブインターフェースにする場合に指定します。 | ||||
メソッド宣言 | メソッドの宣言です。 | ||||
定数 | 自動的にstatic finalになります。 |
解説
単一継承において、多重継承のようなポリモーフィズムを実現する手段です。
Javaは単一継承しかサポートしないため、クラスは1つのスーパークラスしか持てません。
しかし、実際のプログラミングでは複数のクラスのサブクラスとしてポリモーフィズムを機能させたい場合がよくあります。
これを実現するために、インタフェースと呼ばれるものが用意されています。
クラスはインタフェースを複数実装することができます。
インタフェースは抽象クラスと似ていますが、
メソッドは自動的にpublicかつabstractになります。
定数を宣言できます。
クラスメソッド/クラスフィールド
クラスに関する情報をやりとりするのにクラスメソッドおよびクラスフィールドを使用します。
クラスメソッドからインスタンスメソッド、インスタンスフィールドへはアクセスできません。
インスタンスメソッドからクラスメソッド、クラスフィールドへはアクセス可能です。
クラスメソッドからインスタンスメソッド、インスタンスフィールドへはアクセスできません。
インスタンスメソッドからクラスメソッド、クラスフィールドへはアクセス可能です。
宣言
static を指定します。
アクセス
クラス.メソッド
変数.メソッド
クラス.フィールド
変数.フィールド
変数.メソッド
クラス.フィールド
変数.フィールド
staticイニシャライザ
クラス内のどのメソッドよりも先に呼び出されます。
クラスフィールドの初期化に使用します。
書式
クラスフィールドの初期化に使用します。
書式
static{
処理
}
staticイニシャライザ内でエラーが発生するとExceptionInInitializerErrorがスローされます。
処理
}