この章で学ぶこと

SUN教科書 Javaプログラマ(SJC-P) 5.0・6.0両対応(試験番号310-055、310-065)
- 作者: ポール・サンヘラ,山本道子,株式会社トップスタジオ
- 出版社/メーカー: 翔泳社
- 発売日: 2009/05/13
- メディア: 単行本(ソフトカバー)
- 購入: 10人 クリック: 139回
- この商品を含むブログ (16件) を見る
列挙型
列挙型 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 はメソッド内で宣言することはできない
- enum を switch 文内の有効な引数として使用できる
継承
- 継承・・・既存のクラスをもとに新たなクラスを記述する。 コードの再利用が促進される
- 親クラス(スーパークラス)・・・継承されるクラス
- 子クラス(サブクラス)・・・継承されるクラス
- サブクラスはスーパークラスのメンバを継承する
- Java では、クラスは1つのクラスのみ継承できる(単一継承)
- 多重継承を行いたい場合はインターフェースを用いる
- 継承によって新たなクラスを作成するには extends キーワードを使用する
《修飾子》 class 《サブクラス名》 extends 《スーパークラス名》{}
コンストラクタの作成と呼び出し
コンストラクタの宣言
《修飾子》 《コンストラクタ名》(《引数リスト》){...}
コンストラクタを呼び出した際に行われる処理
- コンストラクタ名はクラス名と同じでなければならない
- コンストラクタは0個以上の引数を持つことができるが、戻り値は持たない
- 1つのクラスが複数のコンストラクタを持つことができる
- クラスにコンストラクタが1つも定義されていない場合、コンパイラが引数をとらないコンストラクタ(デフォルトコンストラクタ)を提供する。 コンストラクタを1つでも定義すると、デフォルトコンストラクタは提供されない
- あるクラスの外部からは、new 演算子を使用せずにコンストラクタを呼び出すことはできない
- あるクラスの内部からは、1つのコンストラクタから他のコンストラクタを呼び出すことはできる。 他の場所からは外部からと同様。
- コンストラクタは継承されない
- サブクラスをインスタンス化した場合、まずスーパークラスのコンストラクタが実行される。 明示的に指定しない場合は、スーパークラスの引数なしコンストラクタ(つまり super())が実行される
- スーパークラスのコンストラクタ(引数の有無にかかわらず)を明示的に呼び出したい場合は、super キーワードを使用する
- 同じくラスに定義されている他のコンストラクタ(引数の有無にかかわらず)を明示的に呼び出したい場合は、this キーワードを使用する
- super や this による他のコンストラクタの呼び出しは、コンストラクタのコードブロックの先頭に無ければならない
- インスタンス化されるクラス内のコンストラクタ本体が実行される前に必ず、スーパークラスが初期化される
- スーパークラスが引数なしのコンストラクタを持たない場合、サブクラスでは明示的に super 呼び出し(引数ありの)をしなければコンパイルエラーになる
コンストラクタの 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つ以上のインターフェースを拡張できる