平時習慣使用lombok工具,免去了我們寫get
、set
方法之類的,當然了,我們使用@data註解後,equals()
、hashcode()
、tostring()
也省卻了。但是當你**存在繼承關係時,就得留心結果是否是你想要的了?
下面我直接列舉個例子吧:
父類:
@data
@noargsconstructor
@allargsconstructor
public
class
tag
子類:
@data
@noargsconstructor
public
class
usertag
extends
tag}
其實關係就這麼easy,最後我們test來說明問題
當看著實際結果和預期結果不同,當然了,很容易就想到是public
class
usertagtest
}
執行實際結果:
firstadd
:true
secondadd
:false
tagset
size
:1
equals()
和hashcode()
的問題。最後我反編譯看著@data幫我們生成的equals()
和hashcode()
,如下:
public
boolean
equals
(object o)
else
if (!(o instanceof usertag)) else else
} else
if (!this$userid.equals(other$userid)) return
true;
}}
protected
boolean
canequal
(object other)
public
inthashcode
()
實際上只比較了userid
,說到這,得到上面的執行結果也就很正常了。
java中子類繼承父類程式執行順序
我們經常在專案中使用繼承,但是往往不太明白,程式執行的順序以及原理,尤其是使用上轉型物件的時候,以及父類子類中都有static變數和方法時,不知道先執行誰。下面是乙個簡單的繼承,來檢視 的執行順序 package test class person person class student exte...
關於父類子類繼承關係
一.繼承 子類可以直接復用父類中的成員.子類繼承父類所有方法的宣告和實現 非私有的例項變數以及協議 繼承時要在.h中宣告一下 繼承具有單根性和傳遞性 繼承的根類 大多都繼承自 nsobject 類,所以在定義乙個類時,要繼承nsobject 類。繼承就是 優化公共部分交給父類 例如 person是父...
java中子類繼承父類方法及呼叫規則
有時候我們會遇到這種情況 父類中有方法a和方法b,方法a中呼叫了方法b。某類繼承該類,重寫了方法b,但沒有對方法a進行重寫。那麼在用子類的例項呼叫該方法a時,最終會執行哪乙個方法b呢?我們可以寫一段簡單的程式驗證一下。class a void printword class b extends a ...