Ключевое слово abstract означает, что дочерние классы должны переопределять метод - это (один из способов) Java поддерживает полиморфизм. Если вы хотите сделать так, чтобы подклассы не могли переопределить метод, вы помечаете его как финальный. Таким образом, было бы невозможно иметь метод «абстрактного финала», поскольку они полностью противоположны друг другу.
ключевое слово static также подразумевает final - все статические методы также являются окончательными. Таким образом, невозможно иметь метод, который является как статическим, так и абстрактным, поскольку вы сможете создать метод, который является абстрактным и окончательным.
Причина того, что static является окончательным, заключается в том, что он привязан к классу, а не к экземпляру. Это означает, что компилятор ищет его во время компиляции, а не во время выполнения, чтобы определить, какой метод вызывать. Причина, что это так? Произвольное решение, которое приняли дизайнеры Java - они могли допустить переопределение статического метода, но решили этого не делать. У меня нет особого понимания, почему, к сожалению, один из них выбрал другое.