这两个陈述之间的语义差异是什么?

时间:2018-02-17 15:25:18

标签: java interface casting static this

我有两个(相当无用的)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。;因为结果明智,如果我错了,请纠正我,他们几乎是一样的。

2 个答案:

答案 0 :(得分:2)

因此,接口变量默认为public static final ((test)this).atest.a 之间没有区别,因为((test)this)编译器期望引用类型为test。对于编译器这个真的没关系。例如

System.out.println(((test)null).a);

以上行也可以正常输出。

答案 1 :(得分:1)

没有区别。但是通过实例引用引用静态成员并不是一个好习惯。

this投射到父级以访问其静态字段真的误导。