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