我正在学习java中的接口,我正在学习的源代码清楚地表明静态变量不会被继承。但由于某种原因,我能够访问该静态变量而无需在其之前添加接口名称。我想知道为什么会发生这种情况并深入解释最新情况!!! plzz帮助
class StaticMethods {
public static void main(String [] com) {
TourClient t = new TourClient(); // i made this a class variable in place of interface variable just for demonstration
t.check();
}
}
interface Tour {
///This stuff is just for display, doesn't play a role
static float minimalCost = 50000;
static float maximumCost = 1000000;
static float recommendedRating = 3.9f;
static int minimumVisitingPlaces = 4;
}
interface DubaiTour extends Tour {
static float Rating = 4.4f;
}
class TourClient implements DubaiTour{
void check() {
System.out.println(Rating); // This is not giving me any errors!!
}
}
注意: - 我发现了一个堆栈溢出页面Does static variable inherited? ,但这并没有深入解释为什么会发生这种情况,这对我没有帮助
答案 0 :(得分:0)
继承静态变量。
答案 1 :(得分:0)
再一次 - 静态变量是继承的 - 但你不应该使用它们。原因是,如果你构建你的程序。为了优化,TourClient类变量将替换为常量。 System.out.println(Rating)行被System.out.println(4.4)替换 - 一切都很好。如果您编辑界面并将变量更改为5.5,那么它将无法在您的TourClient类中更新。它可能仍会打印4.4。在接口中使用静态变量时,需要重新编译所有内容。不只是你改变的文件。