Любой пользователь, который хотел бы получить доступ к объекту java.util.ArrayList
, должен выполнить договор об использовании, указанный в java.util.List
.Почему методы trimToSize/securityCapacity обеспечивают доступ к «общедоступному» уровню?
Но один может разорвать этот договор об использовании легко и доступ к методам trimToSize
public void trimToSize() { ... }
и ensureCapacity
public void ensureCapacity(int minCapacity) { ...}
Поскольку эти два метода не являются ни переопределяется из java.util.AbstractList
ни осуществлялся с java.util.List
.
Итак, почему эти два метода обеспечивают доступ к уровню public
и нарушают абстракцию, предоставляемую java.util.List
?
Эти методы являются дополнительной функциональностью. Я не думаю, что они нарушают какой-либо контракт в 'java.util.List', поскольку все эти функции также (предположительно) правильно реализованы. Как вы думаете, как они нарушают контракт? – msandiford
Каким образом абстракция, предоставляемая 'java.util.List',« сломана »этими методами« ArrayList »? Это похоже на то, что собаки «ломают абстракцию« млекопитающих », потому что они могут лаять, а лай не является частью абстракции« млекопитающее ». –
Итак, вы говорите, что подклассы никогда не должны расширять интерфейс своих суперклассов публичными методами? – Smutje