Previous | Next | Trail Map | Writing Java Programs | オブジェクト、クラス、インタフェース


サブクラスの作成

クラスの宣言では、クラスが別のクラスのサブクラスであると宣言する。 例えば、 Number クラスのサブクラス ImaginaryNumber を作成すると仮定すると ( Number クラスは java.lang パッケージの一部であって、 Integers 、 Floats および他の数の基本クラスである。) 次のようになる。

class SubClass extends SuperClass {
    . . .
}

ここでは、SubClass がスーパークラスクラスのサブクラスであると宣言している。 同様に SuperClass が SubClass のスーパークラスであると暗黙に宣言している。 サブクラスは、そのスーパークラスのスーパークラスなど継承ツリーの上からも変数とメソッドを継承する。 説明を容易にするために、この入門書ではクラスのスーパークラスを言及する時は、そのすべての上位クラスと同様にクラスの直接の祖先を意味する。

サブクラスを作成することは、(上記の ImaginaryNumber 宣言のように)クラス宣言で extends 節 を組み込むくらい単純である。 しかし、メソッドをオーバーライドするようなクラスをサブクラス化する時は、通常コードで準備をしなければならない。

サブクラスが何のメンバ変数を継承するか?


規則: サブクラスは、そのサブクラスにアクセス可能なスーパークラス内のメンバ変数すべてを継承する(メンバ変数がサブクラスにより隠ぺいされない場合)。


すなわち、サブクラスは


「 PENDING: 例の表示」

メンバ変数の隠ぺい

前の節で述べたように、サブクラスで定義するメンバ変数は、スーパークラスで同一名のメンバ変数を隠す。

「PENDING: これが有用であるかも知れない理由の例」。

Java 言語のこの機能は強力で便利ではあるが、エラーを起こしやすいソースにもなりうる。故意あるいは偶然に、メンバ変数を隠すことができるので、メンバ変数を指定する時は、実際に隠したいメンバ変数だけをを隠すように注意する。

Java メンバ変数の面白い機能として、クラスがスーパークラスを通して隠ぺいされたメンバ変数をアクセスすることができる。

「保留。ここで良い例を提供して、次の一致するべき para の1対を書き換える」

例えば、同じく anInteger を指定して、IntegerClass 内の変数宣言はスーパークラスで宣言を隠す。 以下とともにスーパークラスの anInteger をアクセスすることができる。

super.anInteger 

super はJava 言語のキーワードであり、これによってメソッドは、影の変数やオーバーライドされたメソッドを参照することができる。

サブクラスはどのメソッドを継承するか?

メソッドがサブクラスにより継承されると指定するルールは、メンバ変数のルールに類似している。


規則:サブクラスは、そのサブクラスがアクセス可能なスーパークラス内のメソッドすべてを継承する(メソッドがサブクラスによりオーバーライドされない場合)。


すなわち、サブクラスは


「 PENDING: show 例」

メソッドのオーバーライド

サブクラスはそのスーパークラスでメソッドをオーバーライドすることができるので、クラスはその振る舞いが「十分近い」スーパークラスから継承して、そのスーパークラスの振る舞いを補ったり変更することができる。


Previous | Next | Trail Map | Writing Java Programs | オブジェクト、クラス、インタフェース