Java反射:通過父類物件呼叫子類方法
阿新 • • 發佈:2019-02-17
Person類,有一個name屬性
public class Person {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Student類繼承了Person類,添加了一個no屬性,代表學號寫一個main方法,new了一個Student物件,賦值name為test,no為18public class Student extends Person { private String no; public String getNo() { return no; } public void setNo(String no) { this.no = no; } }
執行結果:public static void main(String[] args) throws Exception { Student a = new Student(); a.setName("test"); a.setNo("18"); Person p = a; Method method = p.getClass().getMethod("getNo"); // 父類物件呼叫子類方法(反射原理) Object o = method.invoke(p); System.out.println(p.getName()); System.out.println(o.toString()); }
test 18
如果是Student重寫了Person中的方法:
執行結果是:public class Student extends Person { private String no; public String getNo() { return no; } public void setNo(String no) { this.no = no; } @Override public String getName() { return "rewrited"; } }
rewrited 18