Я хотел бы знать причину, почему это сначала позволяется в Java (или ой в целом) я помню, что статические методы характерны и для родительского и для дочернего класса
public class Redefine extends Parent{
public static void test () {
}
}
class Parent{
public static void test () {
}
}
Q1: Так как Переопределение не поддерживается для статических методов, как оба Classe могут содержать те же методы?
Q2: Если изменение метод в помехах для выдачи исключения, не определенного не компиляция. почему имеет место. Его, очевидно, не переопределение, таким образом, мне нужно разрешить бросить новое право исключений?
public class Redefine extends Parent{
public static void test () throws Exception{
}
}
A1: : статический метод
для каждого класса. Они не имеют ничего общего с иерархиями наследования с точки зрения полиморфизма. Таким образом, вызов Parent.test ()
вызовет родительский метод, а вызов Redefine.test ()
вызовет дочерний метод.
A2: JLS 8.4.8 пишет:
Если класс объявляет статический метод m, то говорят, что объявление m скрывает любой метод m ', где подпись m является подподпись (§8.4.2) сигнатуры m 'в суперклассах и суперинтерфейсах класса, которые в противном случае были бы доступны для кода в классе.
Объявление метода не должно иметь предложения throws, которое конфликтует (§8.4.6) с предложением любого метода, который он переопределяет или скрывает; в противном случае возникает ошибка времени компиляции.
вы не переопределяете его, вы скрываете это
http://faq.javaranch.com/java/OverridingVsHiding
какое исключение вы получаете?
Q1: Статические методы не переопределяются, поэтому это два разных метода с одинаковой сигнатурой. Один вызывается с помощью Parent.test (), другой - с помощью Redefine.test ()
Q2: Ваш метод кажется правильным. Какая у вас ошибка?