第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

多態(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)用了父類的特性?

正在回答

5 回答

由于你聲明成員變量是都是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.

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

Levin2016 提問者

謝謝你的回答。但是,如果這個(gè)是這樣,那么是不是site里也有兩個(gè)canDo()方法呢?而當(dāng)我用obj調(diào)用canDo()方法的時(shí)候,輸出的卻是Taxi的canDo()方法,即Taxi can travel fast on road!為什么不是調(diào)用父類的方法呢?
2016-07-24 回復(fù) 有任何疑惑可以回復(fù)我~
#2

Smile丶微冷 回復(fù) Levin2016 提問者

方法和變量不同,由于是繼承關(guān)系子類已經(jīng)將原本父類中的canDo方法覆蓋,也就是創(chuàng)建的對(duì)象中只有一個(gè)canDo函數(shù),由于是通過new Taxi創(chuàng)建,自然調(diào)用的是子類的canDo方法
2016-07-24 回復(fù) 有任何疑惑可以回復(fù)我~
#3

Levin2016 提問者 回復(fù) Smile丶微冷

謝謝,我還是沒理解透徹。語句:Traveltool obj = new Taxi(); ,實(shí)際創(chuàng)建的是Traveltool的對(duì)象還是Taxi的對(duì)象呢? 如果是Traveltool的對(duì)象,為什么調(diào)用的是Taxi的方法? 如果是Taxi的對(duì)象,為什么調(diào)用的是Traveltool的變量值呢?
2016-07-24 回復(fù) 有任何疑惑可以回復(fù)我~
#4

Smile丶微冷 回復(fù) Levin2016 提問者

實(shí)際創(chuàng)建的永遠(yuǎn)是new后的類型,new類型時(shí)系統(tǒng)是按照Taxi開辟了一塊內(nèi)存,由于Traveltool是它的父類所以可以引用這塊內(nèi)存,即Traveltool obj = new Taxi();但實(shí)際的內(nèi)存空間還是Taxi類型。當(dāng)調(diào)用變量時(shí),系統(tǒng)會(huì)根據(jù)當(dāng)前的類型就近匹配變量,也就是Traveltool 使用Traveltool 的變量,Taxi使用Taxi的變量。當(dāng)調(diào)用方法時(shí),由于Taxi重寫了Traveltool 的方法,在Taxi只存在一個(gè)canDo方法,所以不論用Traveltool 還是Taxi類型的變量去調(diào)用canDo方法,調(diào)用的都是Taxi重寫過后的方法。
2016-07-24 回復(fù) 有任何疑惑可以回復(fù)我~
#5

Smile丶微冷 回復(fù) Levin2016 提問者

切記不可以把成員變量的方法的調(diào)用過程混淆,父類子類聲明相同的公共變量時(shí)是共存的,而方法的重寫意義相當(dāng)于覆蓋,不能同時(shí)存在。
2016-07-24 回復(fù) 有任何疑惑可以回復(fù)我~
#6

Levin2016 提問者

非常感謝你的耐心解答!
2016-07-25 回復(fù) 有任何疑惑可以回復(fù)我~
#7

Levin2016 提問者 回復(fù) Smile丶微冷

多謝大神耐心解答!我還有一個(gè)疑問,就是如果我用Traveltool obj = new Taxi();創(chuàng)建了對(duì)象,我是不是就無法調(diào)用taxi的site了?也就是說,我如果想調(diào)用子類的成員變量的時(shí)候,就不能用繼承的方法創(chuàng)建子類的對(duì)象呢?
2016-07-25 回復(fù) 有任何疑惑可以回復(fù)我~
#8

Smile丶微冷 回復(fù) Levin2016 提問者

當(dāng)調(diào)用Taxi中的site時(shí)可以先將Traveltool obj強(qiáng)制轉(zhuǎn)換成Taxi類型Taxi obj2 = (Taxi)obj;不過出于封裝的考慮,一般情況下是不會(huì)將類中的成員變量設(shè)置為public,而是通過適當(dāng)?shù)姆椒▉碚{(diào)用,當(dāng)子類想要調(diào)用父類變量或者方法時(shí)使用super,輸出本身的變量時(shí)則用this,這樣就既可以得到父類的變量又可以輸出自己的變量。不過子類如果擁有與父類同名的變量時(shí),表示子類的新特性,一般情況不會(huì)再去調(diào)用父類的同名變量。
2016-07-25 回復(fù) 有任何疑惑可以回復(fù)我~
查看5條回復(fù)

這個(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è)人理解)

0 回復(fù) 有任何疑惑可以回復(fù)我~

謝謝,我還是沒理解透徹。語句:Traveltool obj = new Taxi(); ,實(shí)際創(chuàng)建的是Traveltool的對(duì)象還是Taxi的對(duì)象呢?

如果是Traveltool的對(duì)象,為什么調(diào)用的是Taxi的方法?

如果是Taxi的對(duì)象,為什么調(diào)用的是Traveltool的變量值呢?

0 回復(fù) 有任何疑惑可以回復(fù)我~

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?

0 回復(fù) 有任何疑惑可以回復(fù)我~

(我不太清楚你的意思,你是指父類和子類都定義了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è)最合適的方法。

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

Levin2016 提問者

public class Traveltool {//父類 public int site; public class Taxi extends Traveltool {//子類 String way = "Taxi travel by road"; int site = 5; public class Initial {//初始化類 public static void main(String[] args) { System.out.println(obj.site); //為什么結(jié)果是0而不是5?
2016-07-23 回復(fù) 有任何疑惑可以回復(fù)我~
#2

Levin2016 提問者

public class Initial { public static void main(String[] args) { Traveltool obj = new Taxi(); System.out.println(obj.site); 為什么結(jié)果是0而不是5?因?yàn)槲覄?chuàng)建的是子類的對(duì)象,為什么不調(diào)用子類的site值呢
2016-07-23 回復(fù) 有任何疑惑可以回復(fù)我~

舉報(bào)

0/150
提交
取消
Java入門第二季 升級(jí)版
  • 參與學(xué)習(xí)       531102    人
  • 解答問題       6280    個(gè)

課程升級(jí)!以終為始告別枯燥,在開發(fā)和重構(gòu)中體會(huì)Java面向?qū)ο缶幊痰膴W妙

進(jìn)入課程

多態(tài)對(duì)象特性

我要回答 關(guān)注問題
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)