我有两个(相当无用的)interfaces
test1
延伸test
interface test
{
int a = 8;
void show();
}
interface test1 extends test
{
int a = 4;
void show();
}
我有一个类MyClass
(再次有点无用)实现test1
接口
public class MyClass implements test1
{
public void show()
{
System.out.println(((test)this).a); // 1
System.out.println(test.a); // 2
}
public static void main(String ar[])
{
new MyClass().show();
}
}
在我提供的代码中,我很想知道两个语句之间的语义差异(如果有的话) 1。和分别 2。;因为结果明智,如果我错了,请纠正我,他们几乎是一样的。
答案 0 :(得分:2)
因此,接口变量默认为public static final
。 ((test)this).a
和test.a
之间没有区别,因为((test)this)
编译器期望引用类型为test
。对于编译器这个真的没关系。例如
System.out.println(((test)null).a);
以上行也可以正常输出。
答案 1 :(得分:1)
没有区别。但是通过实例引用引用静态成员并不是一个好习惯。
将this
投射到父级以访问其静态字段真的误导。