我有以下例子:
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
A<ConcreteErrorHandler> a = new A<ConcreteErrorHandler>();
a.m(); //Exception here!
}
public static class AbstractErrorHandler {
public static void handle(){
throw new UnsupportedOperationException("Not implemented");
}
}
public static class ConcreteErrorHandler extends AbstractErrorHandler{
public static void handle(){
System.out.println("Concrete handler");
}
}
public static class A<T extends AbstractErrorHandler>{
public void m(){
T.handle();
}
}
}
为什么调用的是基类的方法,而不是派生类的方法?handle()
方法的签名完全相同。我知道静态方法不会被继承,但在我的情况下不应该抛出一个编译时错误吗?
有人可以解释一下这种行为吗?
A<ConcreteErrorHandler> a = new A<ConcreteErrorHandler>();
类型在编译时已知。 - St.Antariom
方法的范围。 - MadConan