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