倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

翔泳社 SJC-P テキスト覚え書き : 第3章 クラス、メソッド、インターフェース (列挙型・継承・コンストラクタ・抽象クラス・インターフェース)

この章で学ぶこと

SUN教科書 Javaプログラマ(SJC-P) 5.0・6.0両対応(試験番号310-055、310-065)

SUN教科書 Javaプログラマ(SJC-P) 5.0・6.0両対応(試験番号310-055、310-065)

列挙型


列挙型 enum (JDK5 で導入)

  • 事前定義された値のセットだけを変数に保持させたい場合に用いる
  • enum は標準クラスの定義の代替または特殊なクラス
  • public とした場合はファイル名を同じ名前にしなければならない
  • enum をコンパイルすると java.lang.Enum クラスのサブクラスとなる
  • Enum クラスのメソッド(の一部)
    • final boolean equals(Object obj)
    • final String name()
    • String toString()
    • static Enum valueOf(Class enumClass, String name)
    • static 《列挙型》[] values()
    • static 《列挙型》 valueOf(String s)
  • enumコンストラクタ、メソッド、変数を持つことができる。 これらを定義する場合、enum 定数の宣言をセミコロン(;)で終わらせて、その後に記述する。 定数宣言の前に定義するとコンパイルエラーになる
  • enum は外部から new 演算子によってインスタンス化することができない
  • enum は単独のクラスとして宣言することも、他のクラスの内部にネストクラスとして宣言することもできる
  • enumメソッド内で宣言することはできない
  • enumswitch 文内の有効な引数として使用できる

継承

  • 継承・・・既存のクラスをもとに新たなクラスを記述する。 コードの再利用が促進される
  • 親クラス(スーパークラス)・・・継承されるクラス
  • 子クラス(サブクラス)・・・継承されるクラス
  • サブクラスはスーパークラスメンバを継承する
  • Java では、クラスは1つのクラスのみ継承できる(単一継承
  • 多重継承を行いたい場合はインターフェースを用いる
  • 継承によって新たなクラスを作成するには extends キーワードを使用する


《修飾子》 class 《サブクラス名》 extends 《スーパークラス名》{}

コンストラクタの作成と呼び出し


コンストラクタの宣言

《修飾子》 《コンストラクタ名》(《引数リスト》){...}

コンストラクタを呼び出した際に行われる処理

  1. コンストラクタを呼び出したクラスのオブジェクト用にメモリを割り当てられる
  2. メンバが初期化される
  3. コンストラクタの処理が実行される

コンストラクタの super, this のまとめ

  • super 呼び出しも this 呼び出しも指定しない場合、コンパイラによってコンストラクタの先頭に super() が挿入される
  • 引数の有無にかかわらず、明示的に super() の記述を追加するとコンパイラによる super() は挿入されない
  • this を指定して同じクラス内の別のコンストラクタを呼び出す場合、他方のコンストラクタには、コードブロックの先頭に明示的な this 呼び出しがあるか、または明示的ないし暗黙的な(コンパイラによって追加された)super 呼び出しがある。 他方のコンストラクタに this 呼び出しがある場合は、この呼び出しのチェーンの最後に、最終的に super 呼び出しが行われる

抽象クラス

  • 抽象クラス・・・抽象メソッドを持つ(ことができる)
  • 抽象クラスはインスタンス化することができない
  • 抽象クラスの指定は abstract キーワードによって行う
  • 抽象クラスはスーパークラスとして利用する
  • 抽象クラスを継承する具象サブクラスは、抽象クラスで宣言された抽象メソッドを必ず実装しなければならない

抽象メソッドの宣言


《修飾子》 abstract 《戻り値》 《メソッド名》(《引数のリスト》);

  • 抽象メソッド・・・メソッドの宣言だけを持ち、処理内容を持っていないメソッド
  • 抽象メソッドにコードブロック {} を付けてはいけない
  • 抽象メソッドの宣言の後にはセミコロン(;) が必要
  • サブクラスで抽象メソッドを実装する場合、アクセス修飾子は同じものか、もしくは広範囲のものを指定する

インターフェースの作成と使用

  • インターフェース・・・いくつかのメソッド宣言を含むテンプレート。 メソッド宣言定数を提供する(実装は提供しない)
  • インターフェースを実装する具象クラスは、インターフェースに宣言されているメソッドを全て実装しなければならない
  • インターフェースの指定は interface キーワードを使用する
  • インターフェース内で宣言されるメソッドは、暗黙的に public abstract となる。 サブクラスで実装する場合は、必ず public にしなければならない(public にしていない場合はコンパイルエラーになる)
  • インターフェース内で宣言されるメソッドには final, native, strictfp, synchronized を指定できない
  • インターフェース内で宣言される定数は、暗黙的に public static final となる。 これらの定数は宣言時に初期化しておかないとコンパイルエラーになる
  • インターフェースを実装するためには、implements キーワードを使用する
  • 複数のインターフェースを実装する場合、コンマ (,) で区切って指定する
  • インターフェースを実装したクラスを実装クラスと呼ぶ
  • あるインターフェースをもとに別のインターフェース(サブインターフェース)を作ることができる
  • extends は implements の前に指定しなければならない


《修飾子》 class 《クラス名》 implements 《インターフェース名》{}
《修飾子》 class 《クラス名》 implements 《インターフェース名》, 《インターフェース名》{}

extends, implements のまとめ

  • クラスは、 extends キーワードを使用して別のクラス(1つのみ)を拡張(継承)(extends) できる
  • クラスは、 implements キーワードを使用して1つ以上のインターフェースを実装 (implements) できる
  • インターフェースは extends キーワードを使用して1つ以上の以上のインターフェースを拡張 (extends) できる
  • インターフェースはインターフェースまたはクラスを実装 (implements) できない

Point

  • Java プログラムはクラスから成り、クラスはメソッドと変数からなるが、ネストクラスと呼ばれる別のクラスを含むこともできる
  • クラス内の変数およびメソッドは static または非 static があり、非 static メンバは、各オブジェクトの中に保持されるが、static メンバは別領域に用意される
  • enum キーワードを使用して、定数をオブジェクトとして扱うことができる
  • this, super キーワードを利用することにより、コンストラクタから別のコンストラクタを呼び出すことができる
  • クラスは1つのクラスのみ拡張できるが、1つのクラスの拡張に加えて、1つ以上のインターフェースを実装できる。 インターフェースは1つ以上のインターフェースを拡張できる