У меня есть следующий пример:
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()
совершенно одинаковы. Я знаю, что статические методы не наследуют, но не должны ли возникать ошибка компиляции в моем случае?
Может ли кто-нибудь объяснить это поведение?