( Это не философский ответ, а скорее практический ). Требование к модификатору static
очевидно, на что ответили другие. По сути, поскольку интерфейсы не могут быть созданы, единственный способ получить доступ к его полям - сделать их полем класса - static
.
Причина, по которой поля interface
автоматически становятся final
(постоянными), состоит в том, чтобы предотвратить случайное изменение значений в различных реализациях значения интерфейсной переменной, что может непреднамеренно повлиять на поведение других реализаций. Представьте себе сценарий ниже, где свойство interface
явно не стало final
в Java:
public interface Actionable {
public static boolean isActionable = false;
public void performAction();
}
public NuclearAction implements Actionable {
public void performAction() {
// Code that depends on isActionable variable
if (isActionable) {
// Launch nuclear weapon!!!
}
}
}
Теперь подумайте, что произойдет, если другой класс, реализующий Actionable
, изменит состояние переменной интерфейса:
public CleanAction implements Actionable {
public void performAction() {
// Code that can alter isActionable state since it is not constant
isActionable = true;
}
}
Если эти классы загружаются в одной JVM загрузчиком классов, то на поведение NuclearAction
может повлиять другой класс, CleanAction
, когда его performAction()
вызывается после выполнения CleanAction
( в той же ветке или иным образом), что в данном случае может иметь катастрофические последствия (семантически то есть).
Поскольку мы не знаем, как каждая реализация interface
будет использовать эти переменные, они неявно должны быть final
.