Только что попробовал в Eclipse, переменная в интерфейсе по умолчанию является окончательной, поэтому вы не можете ее изменить. По сравнению с родительским классом переменные однозначно изменяемы. Зачем? С моей точки зрения, переменная в классе - это атрибут, который будет наследоваться детьми, и дети могут изменять его в соответствии с их реальной потребностью. Напротив, интерфейс определяет только поведение, а не атрибут. Единственная причина для добавления переменных в интерфейс - это использовать их как константы, связанные с этим интерфейсом. Хотя, согласно следующей выдержке, это не очень хорошая практика:
«Размещение констант в интерфейсе было популярной техникой в первые дни Java, но сейчас многие считают это отвратительным использованием интерфейсов, поскольку интерфейсы должны иметь дело с услугами, предоставляемыми объектом, а не его данными. константы, используемые классом, обычно являются деталями реализации, но размещение их в интерфейсе превращает их в общедоступный API класса ".
Я тоже пробовал либо ставить статический, либо вообще ничего не меняет. Код как ниже:
public interface Addable {
static int count = 6;
public int add(int i);
}
public class Impl implements Addable {
@Override
public int add(int i) {
return i+count;
}
}
public class Test {
public static void main(String... args) {
Impl impl = new Impl();
System.out.println(impl.add(4));
}
}