Разница в подписи при скрытии статического метода в подклассе
Недавно я играл с простым Java-кодом, используяmain
методы для быстрого тестирования кода, который я написал. Я попал в ситуацию, когда у меня было два класса, похожих на те:
public class A {
public static void main(String[] args) {
// code here
}
}
public class B extends A {
public static void main(String[] args) throws IOException {
// code here
}
}
Я был очень удивлен, что код перестал компилироваться, и Eclipse пожаловался, чтоException IOException is not compatible with throws clause in A.main(String[])
.
Ну, оба метода являются статическими иmain
функция вB
просто прячет один отA
Я подумал, что между ними нет абсолютно никакой связи. В статических методах у нас нет полиморфизма, и вызов связан с реализацией конкретного метода во время компиляции, поэтому я не могу понять, почемуmain
вB
не может выдать исключение, которое не объявлено вmain
подпись вA
.
Почему разработчики Java решили применить такое ограничение, и в каких ситуациях это может вызвать проблемы, если компилятор не применял ограничение?