Мои сомнения или аргументЗачем использовать абстрактный класс вместо расширения класса и реализации интерфейса?
IS-Абстрактный класс может быть заменен путем расширения конкретного класса и реализации интерфейса.
Как или что?
В чем состоит абстрактный класс? Методы, которые реализуют поведение по умолчанию. Различные модификаторы доступа. Может расширить другой абстрактный класс. Может быть запрограммирован. и так далее ...
Все они могут быть достигнуты с использованием класса Concrete. Когда необходимо поддерживать структуру и не выполнять реализацию, мы можем использовать интерфейс.
Я вижу абстрактный класс как сочетание класса бетона & Интерфейс.
Чтобы показать некоторые код-
public abstract class MobilePhone {
abstract public String getPhoneModel();
public String getIMEI(){
// Consider execute() is some function that returns us IMEI for now
return execute("*#06#");
}
}
public class SamsungPhone extends MobilePhone {
public String getPhoneModel(){
String imei = displayIMEI();
return getSamsungModelFromDB(imei);
}
}
public class iPhone extends MobilePhone {
public String getPhoneModel(){
String imei = displayIMEI();
return getiphoneModelFromDB(imei);
}
}
То же самое может быть достигнуто, если мы делаем что-то вроде this-
public class MobilePhone {
public String getIMEI(){
// Consider execute() is some function that returns us IMEI for now
return execute("*#06#");
}
}
public interface Imobile {
String getPhoneModel();
}
public class SamsungPhone extends MobilePhone implements Imobile {
public String getPhoneModel(){
String imei = displayIMEI();
return getSamsungModelFromDB(imei);
}
}
public class iPhone extends MobilePhone implements Imobile {
public String getPhoneModel(){
String imei = displayIMEI();
return getSamsungModelFromDB(imei);
}
}
Что это специальный вариант использования или необходимость в абстрактном классе?
References-
When to use an interface instead of an abstract class and vice versa?
When do I have to use interfaces instead of abstract classes?
How should I have explained the difference between an Interface and an Abstract class?
и немного больше (но они не столь полезны)
PS: Я не имею в виду разницу между абстрактным классом и интерфейсом
Итак, учитывая, что вы в порядке с базовыми классами, возникает вопрос: «зачем создавать абстрактные абстрактные классы?». Ну, иногда вы хотите поместить в него абстрактные методы. Иногда вы не хотите, чтобы ваш базовый класс создавался напрямую. Попытка добиться того же самого с сочетанием интерфейса и конкретного базового класса не снижает полезность абстрактного класса. – khelwood
Жаль @RealSkeptic У меня нет отношения. Я видел подавленные голоса, хотя это был неподдельный вопрос, хотя я сказал, что это не тот старый вопрос об абстрактном классе vs Интерфейсы или что-то еще. Прости. Я никогда не хотел этого говорить. Но люди реагируют слишком быстро, не понимая, что именно происходит. – bozzmob
@bozzmob Это не то, что это обман, хотя может быть, это не то, что на этом сайте ... – George