H-p A
Просветленный
(46828)
4 года назад
это-то так.
но к СВОИМ методам (РЕАЛИЗОВАННЫМ в абстрактном классе) - может.
а если таких нету и не будет - то интерфейс делай.
abstract class Weapon {
public void shoot() {
recharge();
fire();
}
abstract void recharge();
abstract void fire();
}
class Pistol extends Weapon {
@Override
void recharge() {
...
}
@Override
void fire() {
...
}
}
АндрейВысший разум (425848)
4 года назад
Вариант через интерфейсы отличается, фактически, только служебными словами. В данном примере не "чистый" интерфейс, а с дефолтным методом:
public interface Weapon {
public default void shoot() {
recharge();
fire();
}
public void recharge();
public void fire();
}
class Pistol implements Weapon {
@Override
void recharge() {
...
}
@Override
void fire() {
...
}
}
Но класс-предок может быть только один, а интерфейсов - сколько угодно.
Angel
Профи
(938)
4 года назад
не используйте слово "ссылается". Это слово уже занято :-)
Ссылка в java это неявный указатель на объект. Обычно говорят что объект ссылается на другой объект. Классы наследуются. Классы могут реализовывать интерфейс. То есть в заголовке класса или его родителя есть объявление implementation КакойтоИнтерфейс. Абстрактный класс почти ничем не отличается от НЕабстрактного класса кроме парочки нюансов. Абстрактный класс может объявлять методы без реализации. Соответственно нельзя создать объект такого класса потому, что комп не знает что именно нужно сделать когда вызывается метод без реализации. Это логично. Поэтому чтобы использовать абстрактный класс, нужно создать его наследника и реализовать недостающие методы. В остальном для абстрактного класса работают все те же правила что и для обычного класса. Если все методы абстрактного класса без реализации, то лучше использовать интерфейс. Это удобнее.