Есть несколько способов сделать так, чтобы класс мог использоваться, а переменная нет. Нужно создать специальный синтаксический контекст.



1 способ

Привести null к нужному типу и обратиться к статической переменной класса

System.out.println(((X.Y) null).Z);



2 способ

Создать класс, который наследуется от нужного класса

static class XY extends X.Y {};

И вывести на экран переменную

System.out.println(XY.Z);



3 способ

Использовать в методе main дженерики

 public static <T extends X.Y> void main(String[] args) {

System.out.println(T.Z)

}