Откуда вы знаете, что люди, реализующие этот метод, будут подчиняться вашим правилам для executeContract (то есть, что он вызывает invokeContract после вызова требуют )? Ответ - нет.
Лучше иметь executeContract в абстрактном классе, чтобы вы могли применять это поведение, возможно, сделав его окончательным, если вы действительно не хотите, чтобы люди изменяли это поведение.
Если invokeContract и требуют, чтобы вызывался только с помощью executeContract , то нет необходимости делать их общедоступными.
Я удивлен, что требуют и , гарантируют возврат Объект , поскольку они звучат как методы, которые просто возвращали бы логическое значение, На самом деле, возвращение Object - это то, что, как правило, не очень хорошо, если только вам это не нужно. В настоящее время потребитель класса, реализующего это, может получить что-нибудь обратно и не хочет делать instanceof проверок повсеместно.
Действительно ли все нужно выбросить ContractError ?
Надеюсь, это поможет.