【Java】クラスの基本メモ
Javaのクラスの基本的な内容を備忘録としてまとめておきます。
見やすさのために、具体例なしで各概念の簡単な説明と書き方を羅列します。
クラス
クラスの定義
クラスを次のように定義する。
class クラス名 { // フィールドやメソッドを定義 }
ファイル名はクラス名.java
のようにする。なお、クラス名は大文字から始める。
実体化
次のようにしてインスタンスを作成する。
型名(クラス名) インスタンス名 = new クラス名(引数1, ... );
このとき与えた引数はコンストラクタに渡される。
インスタンス instanceof クラス名;
フィールドとメソッド
クラスはフィールド(変数)とメソッドを持つ。
インスタンスフィールドとクラスフィールド
クラスフィールドには宣言時にstatic
をつける。
クラスフィールドはクラスで共通する値を、インスタンスフィールドは個別のインスタンスごとの値を保持する。
クラス外では次のようにアクセスする。
// クラスフィールド クラス名.クラスフィールド名; // インスタンスフィールド インスタンス名.インスタンスフィールド名;
クラス内ではインスタンスフィールドに次のようにアクセスできる。
this.インスタンスフィールド名;
インスタンスメソッドとクラスメソッド
クラスメソッドには宣言時にstatic
をつける。
クラス外では次のようにアクセスする。
// インスタンスメソッド インスタンス名.インスタンスメソッド名(); // クラスメソッド クラス名.クラスメソッド名();
クラス内では、インスタンスメソッドに次のようにアクセスできる。
this.インスタンスメソッド名();
コンストラクタ
インスタンス作成時に呼ばれるメソッド。クラスと同じ名前を持つ。修飾子をつけず、次のように定義する。
クラス名(引数) {
...
}
オーバーライド
- オーバーライド:同じ名前のメソッドを異なる型や個数の引数に対して定義する
引数の個数や型に依らず同様な処理を行いたいとき、異なる引数を同じ名前のメソッドで受け取れると便利だが、これはメソッドのオーバーライドによって実現できる。
引数に応じて適切なものが呼び出される。
コンストラクタをオーバーロードすることもできる。
this()を使うと、異なる定義のコンストラクタを呼び出すことができる。
クラス名(引数) { this(引数); // 与えた引数に対応するコンストラクタが呼び出される ... }
アクセス制限
メソッドやフィールドがどこからアクセスできるかを指定するため、次のようなアクセス修飾子がある。
public
:どこからでもアクセスできるprivate
:クラス内からのみアクセスできるprotected
:クラス内・サブクラス内からのみアクセスできる
クラスの継承
スーパークラス(親クラス)を継承して子クラス(サブクラス)を作るには次のようにする。
class サブクラス名 extends スーパークラス { ... }
コンストラクタのオーバーライド
super()
を用いるとスーパークラスのコンストラクタを呼び出せる。
サブクラス名() { super(); // スーパークラスのコンストラクタを呼び出す // 新たな処理 }
メソッドのオーバーライド
スーパークラスのメソッドと同名のメソッドをサブクラスで定義すると、そのメソッドが上書きされる。
super.メソッド名()
によってスーパークラスのインスタンスメソッドを呼び出せる。
抽象クラス・抽象メソッド
- 抽象メソッド:スーパークラスで宣言され、具体的な処理はサブクラスで定義される。
- 抽象クラス :抽象メソッドを持つクラス。実体化できない。
抽象メソッド、抽象クラス共にabstract
キーワードをつける。
abstract class クラス名() { ... abstract アクセス修飾子 返り値の型 メソッド名(); ... }
サブクラス
アクセス修飾子 返り値の型 メソッド名() { // 具体的な処理 };
まとめ
抽象クラスのありがたみがまだよくわかりません。