多態(tài)對(duì)象特性
當(dāng)創(chuàng)建一個(gè)父類的引用指向本類的對(duì)象時(shí),如何使用這個(gè)對(duì)象調(diào)取本類的特性?例如:
父類:Traveltool;本類:Taxi;他們的特性:int site;如何調(diào)用對(duì)象obj3來調(diào)用Taxi里面的site值?
Traveltool obj3 = new Taxi();
System.out.println(obj3.site);
這個(gè)命令輸出的是Traveltool中的site值。為什么obj3是Taxi的對(duì)象,卻調(diào)用了父類的特性?
2016-07-24
由于你聲明成員變量是都是public,導(dǎo)致Taxi類中實(shí)際上存在兩個(gè)site,兩個(gè)way變量,當(dāng)對(duì)象為Traveltool時(shí)條用的則是父類的site(沒有初值默認(rèn)為零),就是你的這種情況。想要輸出5則要?jiǎng)?chuàng)建一個(gè)子類的對(duì)象,如Taxi taxi = (Taxi)obj;System.out.println(taxi.site);結(jié)果就是5.
2016-08-06
這個(gè)通過存儲(chǔ)地址很好解釋,比如創(chuàng)建一個(gè)類A占用1.0M內(nèi)存,類B繼承類A ,創(chuàng)建類B 則占用1.5M內(nèi)存(即類B內(nèi)存大小0.5M),當(dāng)我們new B();時(shí),編譯器為我們分配1.5M內(nèi)存,分別為(A+B),當(dāng)我們對(duì)象類型是類A時(shí),類A對(duì)象就只指向1.0M內(nèi)存中的數(shù)據(jù),所以輸出0,當(dāng)我們調(diào)用方法時(shí),因?yàn)锽繼承A,并且B類重寫了A的方法,所以我們看到是調(diào)用B中的方法。當(dāng)然,對(duì)象類型為B時(shí),對(duì)象指向1.5M的內(nèi)存,我們輸出?site的值也就是B中的數(shù)值?。ㄗⅲ簜€(gè)人理解)
2016-07-24
謝謝,我還是沒理解透徹。語句:Traveltool obj = new Taxi(); ,實(shí)際創(chuàng)建的是Traveltool的對(duì)象還是Taxi的對(duì)象呢?
如果是Traveltool的對(duì)象,為什么調(diào)用的是Taxi的方法?
如果是Taxi的對(duì)象,為什么調(diào)用的是Traveltool的變量值呢?
2016-07-23
package com.imooc;
//父類
public class Traveltool {
public String way = "Traveltoll can travel!" ;
public int site;
public void canDo(){
System.out.println("Traveltool can travel fast on road! " + "Bike can take " + site + " people!");
}
}
package com.imooc;
//子類
public class Taxi extends Traveltool {
String way = "Taxi travel by road";
int site = 5;
public void canDo(){
System.out.println("Taxi can travel fast on road! " + "Bike can take " + site + " people!");
}
}
package com.imooc;
//初始化類
public class Initial {
public static void main(String[] args) {
// TODO Auto-generated method stub
Traveltool obj = new Taxi();
System.out.println(obj.site);
}
}
結(jié)果為什么是0而不是5?
2016-07-23
(我不太清楚你的意思,你是指父類和子類都定義了site這個(gè)數(shù)據(jù)嗎?額,還有,site這個(gè)數(shù)據(jù)你不封裝起來嗎?或者是site是一個(gè)方法?)根據(jù)多態(tài)性,編譯器在編譯的時(shí)會(huì)通過動(dòng)態(tài)綁定生成一個(gè)方法表,如果方法中,有同樣的簽名,會(huì)自動(dòng)調(diào)用一個(gè)最合適的方法。