Java: Как заставить данный защищенный метод перегружать дочерние классы?
Отцовский класс не является и не может быть абстрактным.
Метод перегрузки защищен, поэтому интерфейсы там не могут быть использованы.
Имея в виду эти два ограничения, можно ли это сделать?
Ответ 1
Вы не можете заставить метод быть переопределенным - то, что для абстрактных методов (которые вы указали, не является опцией).
Одна из возможностей заключается в том, чтобы метод в базовом классе выбрал UnsupportedOperationException. Затем подкласс должен переопределить его, чтобы предотвратить выброс ошибки. Таким образом, вы можете, по крайней мере, определить, был ли метод переопределен.
Например:
public class Father {
public void method ( ) {
throw new UnsupportedOperationException( );
}
}
public class Child1 extends Father {
}
public class Child2 extends Father {
public void method ( ) {
// Do something useful here...
}
}
Вызов Child1.method() будет бросать UnsupportedOperationException, указывая, что он не переопределил Fathermethod(). Вызов Child2.method() не будет генерировать исключение, что означает, что он переопределил method().
Ответ 2
Вы можете отправить исключение UnsupportedOperationException из родителя. Это не поможет во время компиляции, но будет во время выполнения.
Ответ 3
Так как абстракция не является вариантом, вы можете вызвать метод NotImplementedException. Это более явное исключение, чем UnsuppotedOperationException. Примечание.. Это не помешает компиляции кода и будет генерировать исключение только во время выполнения.
Public Clazz {
public void methodToOverride(){
Throw new NotImplementedException();
}
}