2013-08-30 52 views
3

我正在編寫兩個類。java中的「字段隱藏另一個字段」警告 - Netbeans

public class ServerPanel extends JPanel{ 

private EventListenerList listenerList = new EventListenerList(); 
(...) 
} 

而且

public class DetailsPanel extends JPanel{ 

private EventListenerList listenerList = new EventListenerList(); 
(...) 
} 

現在,NetBeans是警告我要域隱藏了另一個字段中,listenerList變量。

所以我的問題是,這是一個嚴重的問題?稍後在添加/刪除事件時會遇到問題嗎?

這是不錯的java練習嗎?

我該怎麼辦?

謝謝!

+2

避免「重新定義」字段,除非是真正需要的字段。保持名稱不同以避免混淆 - 並且使查找文檔變得更加容易。在任何情況下,JPanel/superclass代碼都不會受到影響(因爲只有方法可以是虛擬的),所以除非超類的'listenerList'打算從重新定義的類(或子類)中使用,否則任何東西都不會突然中斷。 – user2246674

回答

4

這不是一個編譯錯誤,並且兩個字段分開處理,所以沒有什麼會打破。不過,我不會推薦這樣做,因爲任何人在使用代碼時都會感到困惑,包括你在內。

您也應該知道,您不會替換超類中的listenerList字段,只需創建一個具有相同名稱的新字段即可。

[編輯]

我應該澄清;名稱不是,正好是一樣;完全合格的名稱是不同的:

javax.swing.JPanel.listenerList 
whatever.yourpackageis.ServerPanel.listenerList 
whatever.yourpackageis.DetalsPanel.listenerList 
+1

Java語言的一個非常好的「功能」[諷刺]。相同的名稱,但不是相同的屬性,編譯器不會抱怨它,很好! – Julien

4

https://docs.oracle.com/javase/tutorial/java/IandI/hidevariables.html

隱藏字段

在一類,具有相同的名稱作爲 超一個字段的字段隱藏超類的領域,即使他們的種類是 不同。在子類中,超類中的字段不能是其簡單名稱引用的 。相反,該字段必須通過super訪問 ,這將在下一節中介紹。一般來說 說,我們不建議隱藏字段,因爲它使代碼難以讀取 。