Как полностью скрыть метод суперкласса в Java
Недавно я подумываю о создании собственной библиотеки Date.
И здесь я нахожу проблему, вот она:
Как скрыть метод суперкласса в подклассе? Поэтому он не будет обнаружен в подклассе.
Пример:
У меня есть класс, который распространяется на Date и другой класс, который распространяется на предыдущий класс.
В моем новом подклассе он обнаруживает все методы из Date, например getDate и т.д.
Я хочу, чтобы в моем подклассе все методы из Даты не были обнаружены, а не бросали
исключение, но полностью не обнаружено.
Заранее спасибо:)
Ответы
Ответ 1
Благодарите композицию над наследством здесь.
Вместо того, чтобы наследовать Дату, это как поле участника внутри вашего класса MyDate.
public class MyDate {
private Date dt = new Date();
// no getDate() available
public long getTime() {
return date.getTime();
}
}
Вы получаете полный контроль над API дат, который видим вашим подклассам (без необходимости исключать какие-либо исключения), но этот подход более практичен, когда методы, которые вы хотите скрыть, превосходят числа, которые вы хотите оставаться доступными.
Ответ 2
Вы не можете скрыть его, если он расширен, но вы можете переопределить.
если вы хотите, чтобы ваш пользователь API не использовал метод, я предлагаю переопределить и просто выброшу это исключение:
UnsupportedOperationException
но, глядя на то, что вы написали, вам следует рассмотреть возможность создания поля Date в вашем классе, а не расширения класса.
Ответ 3
Невозможно.
Если то, что вы хотите, возможно, тогда наследование будет нарушено. Внезапно, когда вы используете определенный тип IS-A Date
, вы не сможете вызвать какие-либо методы типа Date
. Это неправильно на нескольких уровнях. Например, он нарушает Принцип замены Лискова.
Ответ 4
вместо этого вы можете использовать делегирование
public class NewDate{
Date d;
NewDate(){
d = new Date();
}
methodsYouWantToChange(){
// new implementation
}
methodsYouDontWantToChange(){
d.methodsYouDontWantToChange();
}
newMethods(){
// new implementation
}
}
Ответ 5
Переопределите метод и сделайте его статическим, он скроет метод суперкласса