見出し画像

【JavaSilver #04】『緋弾の継承は成された』

継承、抽象クラス、インターフェイス、いろいろとありますが……全部、一緒じゃん!!!!(違う)

そんな理解度の私が、その辺りを書いて、書いて、書いて覚えまくるぞ~~~~~~な記事です。

継承って何???

継承とかいう、無駄に中二臭くてカッコいい言葉。これさえ覚えれば、日頃からカッコいい言葉を連発できるので、覚えよう。
先輩プログラマーに向けて、言ってやるのです。『クラスの継承は成された』――と。

ちなみに、以下、ライトノベル『緋弾のアリア』のネタバレが含まれています。よろしくお願いします。

// 親クラス(スーパークラス)
public class Sherlock {
    public void scarletBallet() {
        System.out.print("緋弾の継承は成された");
    }
}
public class Aria extends Sherlock {
    public void kazaana() {
        System.out.print("風穴開けるわよ!");
    }
}

↑こんな感じのが継承。
Sherlock クラスを、 Aria クラスが継承しています。
5巻にて、シャーロックが、アリアに緋弾を撃ち込むシーンを、上の2クラスで再現しています。

アリアには、緋弾の継承が成されたので、

public static void main(String args[]) {
    Aria aria = new Aria();
    aria.scarletBallet();
}

実行結果:『緋弾の継承は成された』

そして、アリアちゃんなので、もちろんキンジに風穴を開けることができます。

public static void main(String args[]) {
    Aria aria = new Aria();
    aria.kazaana();
}

実行結果:『風穴開けるわよ!』

シャーロックも、緋弾は使えますが……

public static void main(String args[]) {
    Sherlock sherlock = new Sherlock();
    sherlock.scarletBallet();
}

実行結果:『緋弾の継承は成された』

キンジに風穴は開けられない。(いや、開けられるだろうけど、『風穴開けるわよ!』とはいわない)

public static void main(String args[]) {
    Sherlock sherlock = new Sherlock();
    sherlock.kazaana();
}

実行結果:コンパイルエラー(多分。試してません)

これが、継承ってヤツらしい。

ここからは、もうこの題材で説明する意味もないのですが……引き続き、アリアとシャーロックで。

public static void main(String args[]) {
    Sherlock sherlock = new Aria(); // これはOK
    Aria aria = new Sherlock(); // これはダメ
}

親に子は入れられるが、子に親は入れられない。まあ、よく考えれば当然ではありますが……。

ただし、継承しても引き継げないものもあります。
・コンストラクタ
・privateなメソッド、フィールド

public class Sherlock {
    private String gender = "man";
        public void print() {
        System.out.print(gender);
    }
}
public class Aria extends Sherlock {
}

↑これでは、アリアに 変数 gender は継承されません。privateって言ってるんだから、そりゃそうか。

継承で注意すべき点はこのあたり? でしょうか?
細かいルールなんかはありますが、ちょっと覚えてられないので後回し。6割とれればいいの精神。

それでは、さようなら。
……なんだこの記事は。


この記事が気に入ったらサポートをしてみませんか?