Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/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_Function_Static - Fatal编程技术网

Java静态函数

Java静态函数,java,function,static,Java,Function,Static,我有一些课 class A{ static void v(){ System.out.println("A"); } } class A1 extends A{ static void v(){ System.out.println("A1"); } } class B <T extends A>{ void v(){ T.v(); } } A类{ 静态void v()

我有一些课

class A{    
    static void v(){
        System.out.println("A");
    }
}

class A1 extends A{
    static void v(){
        System.out.println("A1");
    }
}

class B <T extends A>{
     void v(){
         T.v();
     }
}
A类{
静态void v(){
系统输出打印项次(“A”);
}
}
A1类扩展了A类{
静态void v(){
系统输出打印项次(“A1”);
}
}
B类{
void v(){
T.v();
}
}
为什么下面的代码输出“A”

bb=新的B();
b、 v();

我认为代码应该输出“A1”,因为
B()

在Java中不能重写静态方法,只能隐藏它们


阅读以下内容:

您的
T.v()
是一个
静态的
方法调用,并编译成
a.v()
,因为
T
根据其上限类型擦除
a

很快java不支持覆盖静态方法:

下面是一个可能的副本,更好地解释了这一情况:
静态方法不会动态调度。要调用的确切方法在编译时得到解决,这是由于擦除造成的。

这里的问题是,对静态方法的调用在编译时静态绑定到声明的变量类型。在这种情况下,编译器知道
T
A


本地对象的泛型类型是
A1
,这并不重要-绑定是在
B
内部进行的,其中
A
是编译器关于该类型的唯一信息。

您没有重写类t的函数v()。因为t是A的子类,调用t.v()的效果等于A.v(),它输出“A”.

T扩展了A
为什么它应该输出其他东西?我认为代码应该输出“A1”,因为B()@dr_yand我把它添加到了你的问题中。
B b = new B<A1>();
b.v();