静态接口变量得到继承.........为什么?

时间:2017-05-19 17:07:57

标签: java interface static

我正在学习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?  ,但这并没有深入解释为什么会发生这种情况,这对我没有帮助

2 个答案:

答案 0 :(得分:0)

继承静态变量。

答案 1 :(得分:0)

再一次 - 静态变量是继承的 - 但你不应该使用它们。原因是,如果你构建你的程序。为了优化,TourClient类变量将替换为常量。 System.out.println(Rating)行被System.out.println(4.4)替换 - 一切都很好。如果您编辑界面并将变量更改为5.5,那么它将无法在您的TourClient类中更新。它可能仍会打印4.4。在接口中使用静态变量时,需要重新编译所有内容。不只是你改变的文件。