將父類的屬性賦值給子類 利用反射

2021-09-11 16:29:13 字數 1153 閱讀 9372

public class a 

public void seta(string a)

public string getb()

public void setb(string b)

}public class b extends a

public void setc(string c)

public string getd()

public void setd(string d)

}/** 假如有a類和b類兩個實體類,b類是繼承於a類的,現在想要將a類中的 a屬性和 b屬性賦值給b類中的a屬和b屬性.第一次我嘗試的方法是 將a類轉為b類.這是乙個錯誤的想法,因為在繼承中是不能向下轉型的.就比如乙個樂器中有薩克斯和小提琴,你可以說小提琴是樂器,但是不能說樂器就是小提琴.然後又查閱資料,了解到使用反射能夠在執行時得到乙個類的各種資訊,所以想法是將想要轉變的父類和子類傳入方法中,然後運用反射將父類中的引數名以及值取出來(此時想要取值的話是通過呼叫get引數名這個方法來取得,例如,有乙個 msg引數,實體類中有getmsg方法才行).取出來後即可將值賦值給傳入的子類.

下面是源**

*//**

* @program: demo

* @description: 反射

* @author: [email protected]

* @create: 2018-03-29 16:02

**/public class demo11

public static void fathertochild(t father,t child) throws exception

class<?> fatherclass = father.getclass();

field declaredfields = fatherclass.getdeclaredfields();

for (int i = 0; i < declaredfields.length; i++)

}/**

* 首字母大寫,in:deletedate,out:deletedate

*/public static string upperheadchar(string in)

}/**

原文:

*/

子類可以直接賦值給父類,但

子類可以賦值給父類,但是只能用父類有的公有方法和屬性。呼叫公有方法時,如果子類重寫了方法則使用子類重寫的方法,如果沒有重寫就使用父類的方法。呼叫公有屬性時,當子類和父類都有相同屬性時,用的是父類屬性。注意,賦值只是賦值給引用具有父類方法和公有屬性的變數而已,記憶體裡還是指向子類的物件,儲存的是子類的...

測試子類物件賦值給父類的引用

public class testget public void b public class testget2 extends testget public static void main string args 列印結果是bbb 修改下 public class testget public ...

型別相容 子類的物件可以給父類指標賦值

乙個公有派生類的物件在使用上可以被當做基類的物件,反之禁止。也就是說 1.派生類的物件可以賦值給基類的物件 如b public a a a b b a b 語法上是允許的 2 派生類的物件可以初始化基類的引用 void f a a int main 3 指向基類的指標可以指向派生類 a p p ne...