在Java接口中的变量
因为我正在学习 Oracle 认证的 Java 程序员 Gold SE 11,而且我经常搞错接口规范,所以我将它们整理在一起。这一次是关于变量的章节。
接口中的变量
接口中的变量
无论是哪个版本的Java,都可以声明接口中的public static final常量。
除了public static final变量之外,不允许其他类型的变量。换句话说,如果定义了变量,除了public static final之外就不存在其他选项,因此可以省略访问修饰符,隐式地添加public static final。
由于是final常量,必须在声明时进行初始化。
public interface Calc {
double PI = 3.14; // 暗黙的にpublic static finalが付与されます
// private double PI = 3.14; publicでないのでコンパイルエラーです
// double PI; 初期化されていないのでコンパイルエラーです
default void setPi(double pi) {
// PI = pi; 暗黙的にfinalで就職されており、値の再代入は許可されていないのでコンパイルエラーです
}
}
继承
子接口可以声明与父接口中声明的常量同名的常量。
此外,实现类可以声明与接口中声明的常量同名的变量。
public interface SuperCalc {
double PI = 3.00;
}
public interface Calc {
double PI = 3.14;
}
public class CalcImpl1 implements Calc {
public static void main(String... args) {
System.out.println(PI); // 3.14 直接実現しているインタフェースのPIが出力されます
System.out.println(SuperCalc.PI); // 3 親インタフェースの定数にアクセスするときはインタフェースのFQCN.定数名でアクセスします
}
}
public class CalcImpl2 implements Calc {
static double PI = 3.1415;
public static void main(String... args) {
System.out.println(PI); // 3.1415 実装クラスにstatic変数があるときは実装クラスの変数の値が出力されます
System.out.println(PI); // 3.14 直接実現しているインタフェースの定数にアクセスするときはインタフェースのFQCN.定数名でアクセスします
System.out.println(SuperCalc.PI); // 3 親インタフェースの定数にアクセスするときはインタフェースのFQCN.定数名でアクセスします
}
}