class Sample
{
public static void main
(String[] args
) {
Derived foo = new Derived();
Base bar = foo;
System.
out.
println("Derived foo: " + foo.
name); System.
out.
println("Base bar: " + bar.
name); }
}
abstract class Base {
public static String name
= "Base"; return Base.name;
}
}
class Derived extends Base {
public static String name
= "Derived"; // 型名を省略したりthisを使ってもいいが、
// いずれにせよ派生クラスごとに実装する必要がある。
return Derived.name;
}
}
Y2xhc3MgU2FtcGxlCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKQoJewoJCURlcml2ZWQgZm9vID0gbmV3IERlcml2ZWQoKTsKICAgICAgICBCYXNlIGJhciA9IGZvbzsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlcml2ZWQgZm9vOiAiICsgZm9vLm5hbWUpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmFzZSBiYXI6ICIgKyBiYXIubmFtZSk7Cgl9Cn0KCmFic3RyYWN0IGNsYXNzIEJhc2UgewogIHB1YmxpYyBzdGF0aWMgU3RyaW5nIG5hbWUgPSAiQmFzZSI7CiAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewogIAlyZXR1cm4gQmFzZS5uYW1lOwogIH0KfQoKY2xhc3MgRGVyaXZlZCBleHRlbmRzIEJhc2UgewogIHB1YmxpYyBzdGF0aWMgU3RyaW5nIG5hbWUgPSAiRGVyaXZlZCI7CiAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewogIAkvLyDlnovlkI3jgpLnnIHnlaXjgZfjgZ/jgop0aGlz44KS5L2/44Gj44Gm44KC44GE44GE44GM44CBCiAgCS8vIOOBhOOBmuOCjOOBq+OBm+OCiOa0vueUn+OCr+ODqeOCueOBlOOBqOOBq+Wun+ijheOBmeOCi+W/heimgeOBjOOBguOCi+OAggogIAlyZXR1cm4gRGVyaXZlZC5uYW1lOwogIH0KfQ==