MyBatis 如何獲取子類的屬性
MyBatis 獲取子類的屬性
這里有個model類:
基類
public class user {
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
private int id;
}
子類
public class vipUser extends user {
public int getVip() {
return vip;
}
public void setVip(int vip) {
this.vip = vip;
}
private int vip;
}
Dao 層方法參數(shù)為父類
Selet(user user)
Mapper.xml 參數(shù)也為父類
parameterType='user'
<if test="vip!=null">vipE=#{vip,jdbcType=int},</if>
這里可以獲取子類的屬性 vip;
Java 代碼實(shí)現(xiàn)父類獲取子類的所有屬性
void testuser(user user) throws IllegalAccessException {
Class clas= user.getClass();
/**
* 返回一個 Field 對象,該對象反映此 Class 對象所表示的類或接口的指定已聲明字段(包括私有成員
*/
Field[] fields = clas.getDeclaredFields();
for (Field f : fields) {
/**
* 取消默認(rèn) Java 語言訪問控制檢查的能力
*/
f.setAccessible(true);
System.out.println("屬性名"+f.toString());
System.out.println("屬性值:"+f.getInt(user));
}
// System.out.println(user.getClass().getName());
}
父類與子類的屬性,方法問題
1.子類繼承父類不可以繼承父類的私有屬性
以及不可以覆蓋父類的私有方法
2.子類不可以直接訪問父類的私有屬性,方法
類似 super.屬性名/super.方法名。但可以間接訪問
3.如果子類不曾覆蓋父類的方法
則訪問調(diào)用父類的方法等同于 super.方法名。在此方法中訪問與子類相同的屬性,實(shí)際上是訪問父類的屬性。----打破父類私有屬性子類不可以訪問。
同樣的如果相同屬性只有父類提供了get方法,子類未提供。則返回的是父類的屬性值。
4.如果在父類的方法采用反射機(jī)制
則調(diào)用的屬性一定是屬于子類的同名屬性,當(dāng)然也可以訪問父類的屬性。
public class Parent {
private String name = "5";
public String getInfo(){
System.out.println(this);
return this.name;
}
public void get(){
System.out.println(this);
Class aClass = this.getClass();
//返回所有this對象的屬性這里是Children1的屬性,不包含繼承的字段
Field[] fields = aClass.getDeclaredFields();
//返回父類的屬性,不包含繼承的字段
//aClass.getSuperclass().getDeclaredFields();
//返回此類的所有字段,包含繼承的可訪問的字段
//aClass.getFields();
for (Field field : fields) {
try {
System.out.println(field.get(this).toString());
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
public Parent(){
}
public void print(){
System.out.println("I am Parent!!!");
}
}
public class Children1 extends Parent{
public String name = "6";
Children1(){
}
@Override
public void print(){
System.out.println("I am children1");
}
}
public class Test {
public static void main(String arsg[]){
Children1 children = new Children1();
//因?yàn)楦割惖姆椒]有被覆蓋,所以調(diào)用的是父類的方法。返回父類的屬性值
System.out.println(children.getInfo());
//內(nèi)部采用反射機(jī)制,因?yàn)閷?shí)例化的是子類
children.get();
}
}
輸出:

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
mybatis-plus使用@EnumValue處理枚舉類型的示例代碼
這篇文章主要介紹了mybatis-plus使用@EnumValue處理枚舉類型的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
Java連接MySQL數(shù)據(jù)庫并實(shí)現(xiàn)數(shù)據(jù)交互的示例
數(shù)據(jù)庫是非常重要的一種存儲格式,可以大大提高存儲效率,本文主要介紹了Java連接MySQL數(shù)據(jù)庫并實(shí)現(xiàn)數(shù)據(jù)交互的示例,具有一定的參考價值,感興趣的可以了解一下2024-03-03
Java實(shí)現(xiàn)基礎(chǔ)銀行ATM系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)基礎(chǔ)銀行ATM系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-05-05
Java中List對象集合按對象中某字段進(jìn)行排序舉例
這篇文章主要給大家介紹了關(guān)于Java中List對象集合按對象中某字段進(jìn)行排序的相關(guān)資料,我們在日常開發(fā)中也經(jīng)常會用到排序算法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-07-07
Java實(shí)現(xiàn)帶頭結(jié)點(diǎn)的單鏈表
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)帶頭結(jié)點(diǎn)的單鏈表,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-09-09

