Чи правда, що переважаючі конкретні методи - це кодовий запах? Тому що я думаю, якщо вам потрібно перекрити конкретні методи:
public class A{
public void a(){
}
}
public class B extends A{
@Override
public void a(){
}
}
його можна переписати як
public interface A{
public void a();
}
public class ConcreteA implements A{
public void a();
}
public class B implements A{
public void a(){
}
}
і якщо B хоче повторно використовувати () в A, його можна переписати як:
public class B implements A{
public ConcreteA concreteA;
public void a(){
concreteA.a();
}
}
що не потребує успадкування, щоб перекрити метод, це правда?
virtual
ключове слово, щоб підтримувати зміни. Отже, питання робиться більш (або менш) неоднозначним особливостями мови.
final
модифікатор існує саме для таких ситуацій. Якщо поведінка методу така, що він не призначений для перекриття, то позначте його як final
. В іншому випадку, сподівайтеся, що розробники можуть вирішити, що це може змінити.