ハイ、かなり時間が経ちましたが続きがやっと完成したので・・・
サブクラスのコンストラクタでは、最初にスーパークラスのコンストラクタを実行して、スーパークラスのオブジェクトを初期化することが必要でした。
クラスがいくつも継承されるときは、この規則は?ということで次の例で見ていきます。
内容には意味はありませんが、コンストラクタの起動順序を調べるためのものです。
起動するとコンソールにこう表示されます。
で、1つのソースファイルに複数のクラスを書けることは16章で学びました。
(だいぶ前だけど・・・・)
この例題には4つのクラスがあり各クラスは次のような関係になります。
これらのクラスのコンストラクタはコンソールに ~クラス という文字列を表示します。次の図でどういう順序で実行されていくか見ていきます。
順序はこんな感じで実行されていきます。
アクセス修飾子としてこれまでpublic,デフォルトアクセス、privateを解説してきましたが・・・ここで最後のアクセス修飾子、protectedを・・・
protectedは次のようなアクセス修飾子です。
A.同じパッケージのクラスからアクセスできるようにする
(デフォルトアクセスと同じ)
B.サブクラスからアクセスできるようにする。
protectedを付けたメソッドや変数はサブクラスからアクセスできます。
サブクラスは別のパッケージにあっても問題なく、デフォルトアクセスの機能もあり、同じパッケージにあればサブクラスだけでなく、他のクラスからもアクセス可能です。
他のアクセス修飾子と共にまとめると次の図のようになります。
実際にprotectedの効果を見ていきます。
package sample17_03_1;
public class Data {
protected double value ;
protected void message() {
System.out.println("Dataクラス");
}
}
package sample17_03_2;
import sample17_03_1.Data;
public class BigData extends Data{
public void display(){
System.out.println(value);
message();
}
}
サブクラスのほうに注目!!!
BigDataクラスはDataクラスとは別パッケージにありますが、Dataクラスのサブクラスなのでprotectedなメンバ(value と message)を使うことができます。
特にvalue はprivateが普通ですがprotectedにしておくことでサブクラスからもアクセスができます。
次は継承の様子を示すイラスト
valueが継承したメンバになってる点に注意!!!
valueがprivateアクセスだった場合、コレは継承してないメンバになります。
protectedアクセスのメンバは、デフォルトアクセスと同様同じパッケージにあるクラスからは自由にアクセス可能。
実際に次の例題で試していきます。
package sample17_03_1;
public class Exec {
public static void main(String[] args) {
Data dt = new Data();
dt.value = 10.5;
System.out.println(dt.value);
dt.message();
}
}
で、実行すると下のような感じになります。
アクセス修飾子はどんな要素につけれるか?ですが・・・一応規則があります。
アクセス修飾子はclass,コンストラクタ、クラスメンバ(フィールド変数、メソッド)インタフェースにつけることができます。
インタフェースについては後々出てくるのでその時に説明を(;・∀・)
ちょっと小さくて見にくいですが一応表を
コレで17章終了です。
残り18.19.20章合わせて約100ページだねwww
ここまでご覧いただきありがとうございました。
参考書は__________________________________
川場 隆 Kawaba Takashi
秀和システム
______________________________________
BY マんタ