Почему, если статический метод не вовлечен в полиморфизм (позднее связывание), я вижу ошибку, что статический метод не может быть переопределен
пожалуйста, рассмотрите следующий код:
class A{
public static void m(Number n){
System.out.println("Number A");
};
}
class B extends A{
public static int m(Number n){
System.out.println("Number B");
return 1;
};
}
выход:
java: m (java.lang.Number) в файле НаследованиеTest.B не может переопределить m (java.lang.Number) в объекте НаследованиеTest. Возвращаемый тип int не совместим с void
Я знаю, что статические методы не участвуют в полиморфизме, поэтому я делаю вывод, что переопределение невозможно для моего кода. Это сообщение компилятора странно для меня.
Как я понимаю, переопределение является частью полиморфизма. Я готовлюсь к scjp и боюсь ошибиться в знакомом вопросе.
Пожалуйста, уточните эту проблему.
ожидаемое для меня поведение - сообщение об ошибке перегрузки
P.S1.
Я прочитал популярный вопрос о статическом переопределении и не нашел ответа (
P.S2. По Пшемо отвечу:
этот код:
class Foo{
public static void m(Number n){
System.out.println("Number A");
};
public static int m(Number n){
System.out.println("Number B");
return 1;
};
}
выходы:
error: method m(Number) is already defined in class Foo
public static int m(Number n){
^
1 error
Для меня эти ситуации одинаковы. Но ошибка компилятора другая - странная.