Overriding interface's variable?

 ̄綄美尐妖づ 提交于 2019-11-27 18:01:53

问题


As I read from various Java book and tutorials, variables declared in a interface are constants and can't be overridden.

I made a simple code to test it

interface A_INTERFACE
{ 
    int var=100; 
}

class A_CLASS implements A_INTERFACE
{ 
    int var=99; 
    //test
    void printx()
    {
        System.out.println("var = " + var);
    }
}

class hello
{

    public static void main(String[] args)
    {
        new A_CLASS().printx();
    }
}

and it prints out var = 99

Is var get overridden? I am totally confused. Thank you for any suggestions!


Thank you very much everyone! I am pretty new to this interface thing. "Shadow" is the key word to understand this. I look up the related materials and understand it now.


回答1:


It is not overridden, but shadowed, with additional confusion because the constant in the interface is also static.

Try this:

A_INTERFACE o = new A_CLASS();
System.out.println(o.var);

You should get a compile-time warning about accessing a static field in a non-static way.

And now this

A_CLASS o = new A_CLASS();
System.out.println(o.var);
System.out.println(A_INTERFACE.var);  // bad name, btw since it is const



回答2:


You did not override the variable, you shadowed it with a brand-new instance variable declared in a more specific scope. This is the variable printed in your printx method.




回答3:


Default signature for any variable in an interface is

public static final ...

So you cannot override it anyhow.




回答4:


The variable you declared in that interface is not visible to the class that implemented it.

If you declare a variable in an static and final, i.e. a constant, THEN it is visible to implementors.



来源:https://stackoverflow.com/questions/8814153/overriding-interfaces-variable

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!