Это зависит от того, что вы имеете в виду только для чтения.Если вы имеете в виду только чтение для вызывающих, то я бы предпочел второе решение.
Первое решение заставляет дочерний класс реализовать get
, что хорошо.Но он запрещает дочернему элементу реализовывать set
(даже защищенный), что плохо.
При втором решении весь интерфейс Value определяется базовым классом, который является хорошим, и дочерним классом.класс по-прежнему может устанавливать значение при выборе, что также хорошо.
Если, с другой стороны, под словом «только для чтения» вы подразумеваете «только чтение», то есть даже дочернему классу не разрешеноУстановите значение, тогда первое решение лучше.Вы даже получите правильную ошибку компиляции, если попытаетесь ее установить.