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

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

若this.getClass==obj.getClass()成立,那么Dog d=(Dog)obj 可以省略吧。

感覺怪怪的

正在回答

3 回答

這是需要的,有些obj需要轉換類型的

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

lqg111

類對象不就關注類的屬性和類型嗎?
2015-07-27 回復 有任何疑惑可以回復我~
#2

初級學習號 提問者

非常感謝!
2015-10-21 回復 有任何疑惑可以回復我~

不可以省略.原因如下:

這里是重寫equals方法的吧.方法聲明如下

public?boolean?equals(Object?obj){}

這個方法中的參數列表里只有一個Object類引用數據類型的變量obj,obj可以保存Object對象和Object類子類對象的引用或者說地址值,這里用到了多態.多態的成員變量訪問特點:編譯時看父類,運行時還是看父類.由這個特點知道這里的obj只能訪問父類的成員變量,不能訪問傳入的子類的特有的屬性(成員變量),如果要訪問子類對象的成員變量必須通過強制類型轉換(向下轉型)將變量obj轉換為子類引用數據類型,根據你的例子,這里需要

Dog?other?=?(Dog)obj;//向下轉型

通過這個操作后,我們得到Dog類型的引用數據類型的變量other,它可以訪問Dog類中定義的成員變量.

總結一下,由于多態成員訪問特點導致obj不能直接訪問子類特有的成員變量,因此用向下轉型將obj變量強轉為子類類型,然后才可以直接訪問子類特有的成員變量.


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

Kiritomas

other 這個變量可以直接拿來用的是么????
2017-02-04 回復 有任何疑惑可以回復我~

我也想了下,可能是這個原因。B extends A,但B和A的屬性(非屬性值)一樣,此時

this.getClass==obj.getClass()相等,但此時需要強制類型轉換

Dog d=(Dog)obj?


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

舉報

0/150
提交
取消
Java入門第二季 升級版
  • 參與學習       531145    人
  • 解答問題       6326    個

課程升級!以終為始告別枯燥,在開發和重構中體會Java面向對象編程的奧妙

進入課程

若this.getClass==obj.getClass()成立,那么Dog d=(Dog)obj 可以省略吧。

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

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

幫助反饋 APP下載

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

公眾號

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