У меня есть класс B, который наследуется от класса A. Суперкласс A является абстрактным, содержащим один абстрактный метод. Я не хочу реализовывать абстрактный метод в классе B, поэтому мне нужно также объявить класс B как абстрактный. Объявляя класс B абстрактным, у меня работают две вещи (программы компилируются и работают правильно):
1.) Я не объявляю никаких абстрактных методов в классе B, даже думал, что класс абстрактный. Это работает, я полагаю, потому что класс наследует абстрактный метод класса A, и этого достаточно для того, чтобы класс был объявлен как абстрактный: нам не нужны никакие другие абстрактные методы, прямо объявленные в классе.
2.) Я объявляю тот же абстрактный метод в классе B, который был объявлен в классе A. Это своего рода переопределение (?), Не в том же смысле, что переопределение в java (с использованием того же заголовка, но предоставление другой реализации), здесь я просто снова использую тот же заголовок метода.
Обе вещи работают, и я не уверен, что оба они в порядке, и является ли один из них предпочтительным (более правильным), чем другой. Одинаковы ли эти два пути (они значат одно и то же для Java)?
Здесь я приведу несколько примеров классов, так что то, что я имею в виду, будет для вас более понятным:
Случай 1.):
public abstract class A {
public abstract String giveSum();
}
public abstract class B extends A {
}
Случай 2.):
public abstract class A {
public abstract String giveSum();
}
public abstract class B extends A {
public abstract String giveSum();
}
Привет