Обычно рекомендуется использовать «более высокие» типы или интерфейсы. Делая это правильно, вы можете скрыть детали реализации . Код, который использует объект, смотрит на него как на код более высокого типа, и не важно, что на самом деле скрывается за ним. Это хорошо, потому что вы можете легко изменить реализацию объекта, ничего не нарушая.
Например, при определении панели в приложении вы должны использовать класс Panel
вместо его реализации, например. HorizontalPanel
или VerticalPanel
.:
Panel myPanel;
Затем вы можете создать правильную реализацию, например, HorizontalPanel
:
myPanel = new HorizontalPanel();
Если впоследствии вы решите изменить myPanel
на VerticalPanel
, вам не придется ничего менять в коде, который использует myPanel
. Все будет работать просто отлично.
Однако вы должны помнить, что вы сможете использовать только методы, доступные в Panel
классе. Дополнительные методы, определенные, например, в HorizontalPanel
не будет доступно. И это на самом деле то, что вы должны помнить при выборе типа ваших виджетов. Ваши виджеты должны быть тех типов, которые предоставляют методы, которые вы хотите использовать.
В вашем примере использование HasText
вместо Button
, вероятно, не очень хорошая идея, поскольку HasText
имеет только методы для установки и получения текста, и вы, вероятно, также хотите иметь доступ к методу addClickHandler
, доступному в Button
и еще несколько.
Итак, для подведения итогов полезно использовать «высшие типы», но они не должны быть «слишком высокими», чтобы быть полезными.