繼承關係中子類使用 Data註解問題

2022-06-16 19:03:16 字數 1325 閱讀 3242

平時習慣使用lombok工具,免去了我們寫getset方法之類的,當然了,我們使用@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 ...