问题
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