Java
как правильней организовывать абстрактный класс JAVA
ссылка абстрактного класса может ссылаться на своих наследников, но как я понял не может получать доступ к их собственным методам и полям, поэтому в абстрактном классе нужно описывать прототипы методов, а потом переопределять их в классах наследниках для удобства реализации полиморфизма, да?
абстрактные классы в Java, https://pro-java.ru/tag/abstraktnye-klassy-v-java/
Родительский класс не может и не должен ссылаться на своих наследников.
Вячеслав Кураков
то есть нужно исключить полиморфизм из языка?))
это-то так.
но к СВОИМ методам (РЕАЛИЗОВАННЫМ в абстрактном классе) - может.
а если таких нету и не будет - то интерфейс делай.
abstract class Weapon {
public void shoot() {
recharge();
fire();
}
abstract void recharge();
abstract void fire();
}
class Pistol extends Weapon {
@Override
void recharge() {
...
}
@Override
void fire() {
...
}
}
но к СВОИМ методам (РЕАЛИЗОВАННЫМ в абстрактном классе) - может.
а если таких нету и не будет - то интерфейс делай.
abstract class Weapon {
public void shoot() {
recharge();
fire();
}
abstract void recharge();
abstract void fire();
}
class Pistol extends Weapon {
@Override
void recharge() {
...
}
@Override
void fire() {
...
}
}
Aleks Koshkin
Вариант через интерфейсы отличается, фактически, только служебными словами. В данном примере не "чистый" интерфейс, а с дефолтным методом:
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() {
...
}
}
Но класс-предок может быть только один, а интерфейсов - сколько угодно.
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() {
...
}
}
Но класс-предок может быть только один, а интерфейсов - сколько угодно.
Правильней вместо абстрактного класса описать интерфейс.
Дмитрий Гордиенко
зря Sun фичу делали?
и в других языках тоже зря? или просто сама реализация поганая?
не джавист
и в других языках тоже зря? или просто сама реализация поганая?
не джавист
не используйте слово "ссылается". Это слово уже занято :-)
Ссылка в java это неявный указатель на объект. Обычно говорят что объект ссылается на другой объект. Классы наследуются. Классы могут реализовывать интерфейс. То есть в заголовке класса или его родителя есть объявление implementation КакойтоИнтерфейс. Абстрактный класс почти ничем не отличается от НЕабстрактного класса кроме парочки нюансов. Абстрактный класс может объявлять методы без реализации. Соответственно нельзя создать объект такого класса потому, что комп не знает что именно нужно сделать когда вызывается метод без реализации. Это логично. Поэтому чтобы использовать абстрактный класс, нужно создать его наследника и реализовать недостающие методы. В остальном для абстрактного класса работают все те же правила что и для обычного класса. Если все методы абстрактного класса без реализации, то лучше использовать интерфейс. Это удобнее.
Ссылка в java это неявный указатель на объект. Обычно говорят что объект ссылается на другой объект. Классы наследуются. Классы могут реализовывать интерфейс. То есть в заголовке класса или его родителя есть объявление implementation КакойтоИнтерфейс. Абстрактный класс почти ничем не отличается от НЕабстрактного класса кроме парочки нюансов. Абстрактный класс может объявлять методы без реализации. Соответственно нельзя создать объект такого класса потому, что комп не знает что именно нужно сделать когда вызывается метод без реализации. Это логично. Поэтому чтобы использовать абстрактный класс, нужно создать его наследника и реализовать недостающие методы. В остальном для абстрактного класса работают все те же правила что и для обычного класса. Если все методы абстрактного класса без реализации, то лучше использовать интерфейс. Это удобнее.
Похожие вопросы
- Абстрактный класс или интерфейс (java)
- Зачем в Java придумали абстрактные классы?
- Чем абстрактный класс отличается от интерфейса?
- Подскажите зачем в Яве интерфейсы и абстрактные классы
- какая разница между интерфейсом и абстрактным классом? И есть она принципиальная ?. Приведите примеры.
- Всем привет. Помогите плз. Мне нужна помощь тех кто действительно хорошо знает Java т. к мне нужно выбрать один из курсов
- Можно ли реализовать полиморфизм (Java) с общим конструктором для разных дочерних классов?
- Помогите доделать код на java. В форму пользователь вводит символ, который нужно заменить на #.
- Не выводит изображение в JAVA
- Java проблема с рефлексией.