亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

請問一下是不是繼承了抽象類,則在main()函數中不能調用子類的成員函數。如圖所示。

58073e1e0001b33a05000237.jpg

58073e2300014ae105000238.jpg

58073e260001a0e405000249.jpg

58073e2b000120ec05000237.jpg

如圖所示

在main()中。shape1能使用成員函數進行賦值。

而在Circle中,成員函數和成員變量定義在了Circle中。就在main()方法中調用不了。

請問這是為什么?

正在回答

3 回答

恩沒事

0 回復 有任何疑惑可以回復我~

不是,你在main函數里面創建對象時是小轉大了,即你在創建Circle對象時是Shape shape2=new Circle();這樣的話,用戶在調用子類對象方法時只能調用子類繼承父類或者子類重寫父類的方法,而你寫的這個父類剛好是一個抽象類,則子類對象調用方法時只能調用父類的抽象方法,其他方法已經屏蔽了。個人認為與接口沒有特別大的關系。

Shape?rt=new?Rectangle(3.0f,4.0f);
		rt.Area(3.0f,?4.0f);
		rt.Circumference(3.0f,?4.0f);
		Circle?cl=new?Circle(5.0f,?3.14f);
		cl.Area(5.0f,?3.14f);
		cl.Circumference(5.0f,?3.14f);
		cl.shuchu();

這是我寫的主函數的一部分,其中shuchu()函數是子類自己獨有的。編譯沒報錯。

0 回復 有任何疑惑可以回復我~
#1

benyl123

如果沒錯,應該是這樣
2016-10-31 回復 有任何疑惑可以回復我~
#2

慕田峪7021683 提問者

謝謝你的回答!
2016-10-31 回復 有任何疑惑可以回復我~
#3

ViktorZ

能解釋一下為什么子類只能調用父類的抽象方法而其他的方法都屏蔽嗎?
2016-11-01 回復 有任何疑惑可以回復我~
#4

benyl123 回復 ViktorZ

我并不是這個意思,我的意思是如果你在創建一個類時用多態的話,即Shape rt=new Rectangle(),此時父類的引用指向本類的對象,此時子類繼承父類的屬性和方法,父類引用只能指向本類繼承過來的屬性和方法,即前面的Shape將Rectangle子類里面可調用的方法范圍變小,而Shape又是抽象類,所以我說此時子類只能調用父類的抽象方法而其他方法都被屏蔽。可以把這部分記憶類比成數學里面的交集。即若A為父類,B為子類,則B包含A,則A^B=A; 但若在創建對象時用Recangle rt=new Rectangle(),此時本類引用指向本類對象,即屬性和方法都不缺少,相當于A^A=A.
2016-11-01 回復 有任何疑惑可以回復我~
#5

benyl123 回復 ViktorZ

我是這樣認為的,不知道這樣理解對不對。
2016-11-01 回復 有任何疑惑可以回復我~
#6

ViktorZ 回復 benyl123

Shape rt=new Rectangle(),父類的引用指向本類的對象,父類是抽象類,子類必須實現父類的抽象方法,而其他方法可以實現也可以不實現,因為子類都繼承了,若子類重寫了父類的非抽象方法,則可以直接調用, 用子類并沒有重寫父類的非抽象方法,則用super關鍵字調用,并不是子類只能調用父類的抽象方法而其他方法都被屏蔽
2016-11-02 回復 有任何疑惑可以回復我~
查看3條回復

接口對象指向引用對象只可以調用引用對象實現的接口方法,不能調用引用對象自己的方法。

我是這樣理解的。

0 回復 有任何疑惑可以回復我~
#1

慕田峪7021683 提問者

我好像沒有用到那個interface。怎么有個接口對象?
2016-10-19 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

請問一下是不是繼承了抽象類,則在main()函數中不能調用子類的成員函數。如圖所示。

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號