2013-08-30 6 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/supercllass не будет затронут (поскольку только методы могут быть виртуальными), поэтому ничто не будет внезапно нарушаться, если не будет использован список listenerList суперкласса из класса переопределения (или подкласса). – user2246674

ответ

4

Это не ошибка компиляции, и два поля обрабатываются отдельно, поэтому ничто не сломается. Тем не менее, я бы не стал рекомендовать это делать, потому что это может смутить любого, кто работает над кодом, включая вас.

Вы также должны знать, что вы не будете заменять поле listenerList в суперклассе, просто создавая новый с тем же именем.

[EDIT]

следует уточнить; имена не точно то же самое; полностью определенные имена различны:

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

Скрытие полей

В классе, поле, которое имеет такое же имя, как поле в суперкласса скрывает поле суперкласса, даже если их типы разные. Внутри подкласса поле в суперклассе не может быть , на которое ссылается его простое имя. Вместо этого поле должно быть обращено к через супер, которое рассматривается в следующем разделе. Обычно говоря, мы не рекомендуем скрывать поля, так как это затрудняет код .

Смежные вопросы