Как JLS говорит о статических полях :
Если поле объявлено статическим, существует ровно одно воплощение поля, независимо от того, сколько экземпляров (возможно, ноль)класса в конечном итоге может быть создан.
О наследование полей :
Класс наследует от своего прямого суперкласса и прямых суперинтерфейсов все незакрытые поля суперкласса и суперинтерфейсов, которые доступны для кода в классе и не скрыты объявлением в классе.
Специального случая наследования статических полей не существует, поэтому они должны бытьНаследуется тоже.
Мы не можем написать хороший репрезентативный пример кода с интерфейсом, потому что его переменные неявно объявлены как static final.Итак, давайте напишем пример с суперклассом.Допустим, у нас есть:
class Base {
static int x = 15;
}
class A extends Base {}
class B extends Base {}
Переменная x
является общей частью класса Base
.Если мы думаем о наследовании с точки зрения отношений IS-A, то A
(или B
) равно Base
.Тогда x
является общей частью A
, B
и Base
.И простая демонстрация:
public class DemoApplication {
public static void main(String[] args) {
System.out.println(A.x++);
System.out.println(B.x);
}
}
Вывод:
15
16
Как видите, суперкласс разделяет статическую переменную с подклассами.А с интерфейсом на самом деле ничего не меняется.