為什么運(yùn)行的結(jié)果是 0 而不是 4?
以下代碼是分在三個(gè)class文件的。貼到一起
//創(chuàng)建一個(gè)Vehicle的父類(lèi)
public class Vehicle {
int paasenger;
}
//創(chuàng)建一個(gè)Car的子類(lèi)
public class Car extends Vehicle {
int passenger = 4;
}
//執(zhí)行
public class initial {
public static void main(String[] args) {
Vehicle obj1 = new Car();
System.out.println(obj1.passenger);
}
}
結(jié)果是0,而不是我想要的4。請(qǐng)問(wèn)錯(cuò)在哪里?
2016-04-30
對(duì)于屬性的重寫(xiě)重寫(xiě), 我們需要看的是它被定義時(shí)的是屬于什么類(lèi)類(lèi)型, 那么它的值就是它的類(lèi)類(lèi)型的相應(yīng)屬性的值
所以obj.passenger的值是0, 因?yàn)閛bj1 的類(lèi)型是Vehicle
如果在改寫(xiě)initial為如下代碼:
public class Initial {
? ? public static void main(String[] args) {
? ? ? ? Vehicle obj1 = new Car();
? ? ? ? Car obj2 = new Car();
? ? ? ? System.out.println(obj1.passenger);
? ? ? ? System.out.println(obj2.passenger);
? ? }
}
則相應(yīng)的輸出為:
0
4
2016-05-17
你父類(lèi)對(duì)象指向子類(lèi)、肯定輸出 子類(lèi)結(jié)果啦!看清楚噢?。?/p>
2016-05-16
使用父類(lèi)類(lèi)型的引用指向子類(lèi)的對(duì)象;該引用只能調(diào)用父類(lèi)中定義的方法和變量;如果子類(lèi)中重寫(xiě)了父類(lèi)中的一個(gè)方法,那么在調(diào)用這個(gè)方法的時(shí)候,將會(huì)調(diào)用子類(lèi)中的這個(gè)方法;(動(dòng)態(tài)連接、動(dòng)態(tài)調(diào)用)