Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么';这两种说法在语义上的区别是什么?_Java_Interface_Casting_Static_This - Fatal编程技术网

Java 什么';这两种说法在语义上的区别是什么?

Java 什么';这两种说法在语义上的区别是什么?,java,interface,casting,static,this,Java,Interface,Casting,Static,This,我有两个(非常无用的)接口和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() {

我有两个(非常无用的)
接口
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.;因为就结果而言,如果我错了,请纠正我。它们几乎是一样的。

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


强制转换到父级以访问其静态字段确实有误导性。

因此,默认情况下,接口变量是
公共静态最终
((测试)this.)和
测试之间没有区别。对于
((测试)this)
编译器,应该使用
测试的引用类型。对于编译器来说,这其实并不重要。比如说

System.out.println(((test)null).a);
上述行也可以工作,并为您提供适当的输出