Предположим, что у меня есть два класса: A и B. Класс A определяется как абстрактный, а B расширяет этот абстрактный класс и, наконец, я тестирую результат, и оба класса являются частью одного и того же пакета.
public abstract class A {
protected abstract void method1();
protected void method2() {
System.out.println("This is Class A method");
}
}
public class B extends A {
@Override
protected void method1() {
System.out.println("This is B implementaiton of A method");
}
}
и теперь, когда я тестирую их:
B b = new B();
b.method1();
b.method2();
Я получаю ожидаемый результат:
This is B implementaiton of A method
This is Class A method
ВОПРОСЫ:
- Какова цель ключевого слова
@Override
, потому что, если я его опускаю, это все еще работает одинаково. - Если я не реализую абстрактный метод, я получаю ошибку компиляции. Так в чем же отличие от реализации интерфейса?
- Кроме того, я могу реализовать
method2()
в B. Затем выход изменяется на то, что используется в B. Не является ли это также переопределением метода родительского класса? Тогда в чем цель явного определения метода как абстрактного в классе A?