java中通過父類引用創建子類對象后,輸出子類的屬性值不是子類中所寫的屬性值,而是繼承父類的,為什么
package?com.hu;?
public?class?Vehicle?{
???public?int?num;???
???public?String?mode;???
???public?String?type;?
?????????
???public?void?ability(){?
??????????System.out.println("交通工具具有載人出行的能力");????????????????
??????????System.out.println("num:"+num+"\nmode:"+mode+"\ntype:"+type);????????????
??????????}????????
??}???
????????????????
public?class?Car?extends?Vehicle?{?
???public?int?num=6;?????
???public?String?mode="陸行";??????
???public?String?type="汽車";??
???????????
???public?void?ability(){
???????????????System.out.println("汽車具有載人陸行的能力");??????????????????
???????????????System.out.println("num:"+num+"\nmode"+mode+"\ntype"+type);????????????????
???????????????}????????????????????
???????????????@Override????????????????????????
???????????????public?String?toString()?{????????????????????????
???????????????return?"Car?[num="?+?num?+?",?mode="?+?mode?+?",?type="?+?type?+?"]";????????????????????????
???????????????}?
???????????????
???????????????public?class?Initail?{???public?static?void?main(String[]?args)?{?
??????????????????????????????Vehicle?vehicle?=?new?Vehicle();????????????????
??????????????????????????????Vehicle?car?=?new?Car();??
????????????????????????????????????????????????????????????????????????????
???????????????????????????????vehicle.ability();??????????????????
???????????????????????????????System.out.println();???
????????????????????????????????????????????????????????????????????
???????????????????????????????car.ability();??????????????????
???????????????????????????????System.out.println();????????????????????????????????????
???????????????????????????????System.out.println(car.num+"\n"+car.mode+"\n"+car.type);//就是這行
???????????????????????????????????????????????
???????????????????????????????System.out.println();????????????????????????????????????????????????????
???????????????????????????????System.out.println(car);????????????????????????
???????????????????????????????}????????????????
???????????????????????????????}為什么
System.out.println(car.num+"\n"+car.mode+"\n"+car.type);
這句輸出的是
0
null
null
而不是
6
陸行
汽車
2018-05-15
父類引用指向子類對象的時候,只有調用方法的時候,得到的才是子類重寫的方法,所以你的car.ability();輸出的是正確的,但是car.num這樣直接調用變量是不行的
2018-07-20
你的屬性應該寫在方法里
2018-07-19
我想應該是這樣的:父類和子類有同名的屬性時,子類的屬性并不會覆蓋父類的屬性,使用父類引用輸出屬性值,輸出的是父類的。而方法不同,方法會覆蓋父類方法。
2018-07-01
闊以? 的
2018-04-25
keyi