25. オーバーライド

25. オーバーライド

動的メソッドディスパッチメカニズム

lesson 060

class Lesson060 {
    public static void main(String args[]) {
        sub_class obj = new sub_class();
        obj.method();
    }
}

class super_class {
    void method() {
        System.out.println("kitty on your lap");
    }
}

class sub_class extends super_class {
    void method() {
        System.out.println("Card Captor Sakura");
    }
}

class third_class extends sub_class {
    void method() {
        System.out.println("LOVE HINA");
    }
}

実行結果

L:\>java Lesson060
Card Captor Sakura

メソッドはオーバーライドされるが、メンバ変数はオーバーライドされない

lesson 061

class Lesson061 {
    public static void main(String args[]) {
        super_class obj = new third_class();
        obj.method();
        System.out.println(obj.str);
    }
}

class super_class {
    String str = "this class is super_class";
    void method() {
        System.out.println("kitty on your lap");
    }
}

class sub_class extends super_class {
    void method() {
        System.out.println("Card Captor Sakura");
    }
}

class third_class extends sub_class {
    String str = "this class is third_class";
    void method() {
        System.out.println("LOVE HINA");
    }
}

実行結果

L:\>java Lesson061
LOVE HINA
this class is super_class

クラス型の拡張と縮小

lesson 062

class Lesson062 {
    public static void main(String args[]) {
        Super sp = new Sub();
        System.out.println(sp.str1);
//      System.out.println(sp.str2); コンパイルエラー「シンボルを見つけられません。」

        Sub sub = (Sub)sp;
        System.out.println(sub.str1);
        System.out.println(sub.str2);
    }
}

class Super {
    String str1 = "Kitty on your lap";
}

class Sub extends Super {
    String str2 = "Card Captor Sakura";
}

実行結果

L:\>java Lesson062
Kitty on your lap
Kitty on your lap
Card Captor Sakura