class Node2Main {
public static void main
(String[] args
) { MyNode2 mn = new MyNode2(5);
Node2 n = mn; // A raw type - compiler throws an unchecked warning
n.setData("Hello");
n.setData(1);
Integer x
= (Integer) mn.
data; // Causes a ClassCastException to be thrown. }
}
class Node2 {
public Node2
(Object data
) { this.
data = data
; }
public void setData
(Object data
) { System.
out.
println("Node2.setData"); this.data = data;
}
}
class MyNode2 extends Node2 {
public MyNode2
(Integer data
) { super(data
); }
public void setData
(Integer data
) { System.
out.
println("MyNode2.setData"); super.setData(data);
}
}
Y2xhc3MgTm9kZTJNYWluIHsKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICBNeU5vZGUyIG1uID0gbmV3IE15Tm9kZTIoNSk7CiAgICAgICAgTm9kZTIgbiA9IG1uOyAgICAgICAgICAgIC8vIEEgcmF3IHR5cGUgLSBjb21waWxlciB0aHJvd3MgYW4gdW5jaGVja2VkIHdhcm5pbmcKICAgICAgICBuLnNldERhdGEoIkhlbGxvIik7CiAgICAgICAgbi5zZXREYXRhKDEpOwogICAgICAgIEludGVnZXIgeCA9IChJbnRlZ2VyKSBtbi5kYXRhOyAgICAvLyBDYXVzZXMgYSBDbGFzc0Nhc3RFeGNlcHRpb24gdG8gYmUgdGhyb3duLgogICAgfQp9CgpjbGFzcyBOb2RlMiB7CgogICAgcHVibGljIE9iamVjdCBkYXRhOwoKICAgIHB1YmxpYyBOb2RlMihPYmplY3QgZGF0YSkgeyB0aGlzLmRhdGEgPSBkYXRhOyB9CgogICAgcHVibGljIHZvaWQgc2V0RGF0YShPYmplY3QgZGF0YSkgewogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTm9kZTIuc2V0RGF0YSIpOwogICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7CiAgICB9Cn0KCmNsYXNzIE15Tm9kZTIgZXh0ZW5kcyBOb2RlMiB7CiAgICBwdWJsaWMgTXlOb2RlMihJbnRlZ2VyIGRhdGEpIHsgc3VwZXIoZGF0YSk7IH0KCiAgICBwdWJsaWMgdm9pZCBzZXREYXRhKEludGVnZXIgZGF0YSkgewogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTXlOb2RlMi5zZXREYXRhIik7CiAgICAgICAgc3VwZXIuc2V0RGF0YShkYXRhKTsKICAgIH0KfQo=