へっぽこびんぼう野郎のnewbie日記

けろけーろ(´・ω・`)! #vZkt8fc6J

サブクラスのインスタンスをスーパークラスから参照してスーパークラスのメソッドを呼んだらオーバーライドされてる…!

public class Override2 {

    void display(){

        System.out.println("Super");

    }

    public static void main(String[] args) {

        OverrideSub[] ors = {new OverrideSub()};

        ors[0].display(); // -> sub

        Override2[] orr = ors;

        orr[0].display(); // -> sub

    }

}

class OverrideSub extends Override2 {

    void display(){

        System.out.println("Sub");

 

    }

}

 これ。

 public class Override2 {

    //void display(){

    //    System.out.println("Super");

    //}

    public static void main(String[] args) {

        OverrideSub[] ors = {new OverrideSub()};

        ors[0].display();

        Override2[] orr = ors;

        orr[0].display(); 

    }

}

class OverrideSub extends Override2 {

    void display(){

        System.out.println("Sub");

 

    }

}

 こうするとコンパイルエラーになる。

な、なんでスーパークラスにキャストしたのにサブクラスのメソッドが呼ばれるんだYO

と思ったけど

なんかひも付けされとるらしい。

7.3 オーバーライドされたメソッドを呼び出すと?再び : Javaのオブジェクト指向入門

ここを読むとしあわせになれます