プログラミング原人の進化ログ

プログラミング原人の進化論

オレ プログラミング ベンキョウ スル。マナンダ コト カク。

【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 アクセス修飾子 返り値の型 メソッド名();
  ...
}

サブクラス

アクセス修飾子 返り値の型 メソッド名() {
  // 具体的な処理
};

まとめ

抽象クラスのありがたみがまだよくわかりません。