1
我試圖在運行時將未知類型的對象轉換爲其未知的超類。我認爲最好的方法是使用反射,但它似乎沒有達到預期的效果。下面是代碼示例塊,其中筆記本電腦擴展設備:反射 - 動態地將對象轉換爲Java中的SuperClass
Laptop obj1 = new Laptop();
System.out.println(obj1.getClass().getName());
String className = obj1.getClass().getSuperclass().getName();
System.out.println(className);
Object newObj;
try {
newObj = Class.forName(className).cast(obj1);
System.out.println(newObj.getClass().getName());
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
所以在這裏我希望看到下面打印到控制檯:
package.Laptop
package.Device
package.Device
但不是我越來越:
package.Laptop
package.Device
package.Laptop
這表明obj1未被轉換爲其父類型設備,因爲我也期望它?
任何人都可以讓我知道我做錯了什麼,或者如果有更好的方法來完成我想要做的事嗎?
這是設計。 – prasanth
對象*總是同時是它們的子類和它們的超類。你不能將一個對象「轉換」爲它的超類。但'getClass()'方法總是返回對象的最深的子類。 –
轉換爲超類的目的是什麼?如果你想隱藏子類的方法/字段,你可以使用裝飾器來隱藏它們。 – glee8e