Подтвердить что ты не робот

Преимущества использования абстрактных классов по сравнению с обычным классом

Я решил начать делать небольшие проекты кодирования самостоятельно, чтобы сосредоточиться на качестве кода вместо количества кода и задать вопрос об использовании абстрактных классов.

Теперь я знаю различия между абстрактными классами и интерфейсами с самым большим (я думаю), что этот интерфейс позволяет вам определять только методы, которые должны быть реализованы классами, используя интерфейс и абстрактные классы, позволяющие определять как метод, так и члены вместе с реализацией метода по умолчанию, если вы этого желаете. Мой вопрос заключается в том, что основное преимущество использования абстрактного класса против обычного класса? Единственное реальное различие между двумя, о которых я могу думать, это то, что вы не можете создать экземпляр абстрактного класса. Существуют ли другие различия между ними?

4b9b3361

Ответ 1

Строго с точки зрения дизайна лучше всего упростить. Я считаю, что лучший способ упростить вещи - использовать простую аналогию. Позвольте использовать аналогию с птицами...

Интерфейс: используйте это, когда вы хотите обеспечить выполнение определенных функций, которые необходимо определить. например IBird имеет контракт на ScreamLikeABird и Fly (функции интерфейса). Но вы можете получить более конкретный характер и иметь IOstrich, у которого есть контракт Run. У вас также может быть IHawk, у которого есть контракт с атакой... и т.д.

Реферат: используйте это, если вы хотите использовать базовые функции и иметь базовые свойства. например Птицы могут быть базовым классом для птиц, которые могут иметь функцию под названием LayEgg, а также пропозиции, называемые Age, Species, NumberOfChicks... и т.д. Эти вещи не должны/не должны изменять поведение птицы, поскольку все птицы откладывают яйца... и т.д. Но не все птицы звучат одинаково, когда они кричат ​​или летают одинаково (некоторые даже не летают).... и т.д.... следовательно, они должны быть реализованы через интерфейс (ы).

Ответ 2

В дополнение к невозможности создания экземпляров абстрактных классов некоторые языки могут поддерживать абстрактные методы в абстрактных классах - подобно интерфейсам, абстрактный метод должен реализовываться классом, наследующим от абстрактного класса.

Основное преимущество абстрактных классов, на мой взгляд, заключается в том, что есть некоторый код, который должен быть разделен между классами того же типа. Обычно для этого вы можете использовать интерфейс, но иногда функциональность таких классов может перекрываться, и в итоге вы получите дублирование кода. В этом случае вы можете использовать абстрактный класс и просто поставить там код.

Ответ 3

В мире OO абстрактные классы использовали для ограничения некоторых ограничений проектирования и реализации. Больше ничего. В любом случае вам никогда не придется использовать абстрактные классы. Но могут быть случаи, когда вы лучше навязываете эти ограничения. Итак, каковы они? Давайте посмотрим, сравнив его со-коллегами.

Абстрактные классы и интерфейсы

Как вы знаете, это две из основных концепций наследования.

В принципе, интерфейс используется только для того, чтобы объявить, что вы хотите наследовать базовую услугу и что она. Не содержит никакой реализации и не имеет функциональности. В этом смысле интерфейс является абстрактным. Вот почему это скорее конструктивное ограничение, чем ограничение реализации. Подумайте о разъеме для наушников на динамике. Каждому наушнику необходимо реализовать интерфейс разъема (с запуском, остановкой, прослушиванием, поворотом, методами turnUp). Каждый наушник должен переопределить этот интерфейс, чтобы наследовать функциональные возможности, которые предоставляет динамик и реализовать соответственно.

Абстрактные классы, с другой стороны, могут включать методы с реализацией. Это основное отличие и в этом смысле оно может использовать повторное использование больше, чем интерфейс. Более того, они могут содержать частные, защищенные и нестатические поля, которые вы не можете использовать через интерфейсы. Вы можете заставить подклассы реализовать некоторые обязательные функции с абстрактными методами (без реализации). Абстрактные классы более гибкие, чем интерфейсы.

Конечно, не говоря уже о том, что вы можете расширить только один класс в java, где вы можете реализовать количество интерфейсов.

Абстрактные классы по сравнению с обычными классами

Итак, почему бы не использовать обычные классы. Какая польза от использования абстрактного класса? Это довольно просто. Если вы используете абстрактные классы, вы принудительно выполняете основные функции, выполняемые братьями и сестрами. Как разработчик, вам не нужно помнить, что вы должны выполнять основные функции. Здесь абстрактные классы налагают конструктивные ограничения на обычные классы. Плюс, сделав абстракцию класса, вы избегаете того, что (неполный) класс создается случайно.

Ответ 4

на мой взгляд, абстрактные классы больше используют в реальных проектах, например, в книгах. несколько раз руководители проектов просто предоставляют декларацию методов, и вам приходится писать код для методов без изменения основного синтаксиса, предоставляемого менеджером. так это то, как абстрактный класс используется полностью. в простом методе класса определяют, объявляют и кодируют в то же время, но не в абстрактных классах.  для ex: -

abstract class Test
{
    abstract void show();//method provided
}
class Child extends Test
{
    void show()//coding 
    {
        System.out.println("saurav");
    }
}
class main
{
    public static void main(String[] args) 
    {
    Test c = new Child();
    c.show();   
    }
}

Ответ 5

Абстрактные классы против обычных классов и интерфейса. Абстрактный класс обычно поддерживает идею обобщения и вносит вклад от программистов, чтобы поддерживать довольно небольшую дисфункцию мозга, разрабатывая многолетние проекты, поскольку они включают абстрактные методы, которые должны описывать реализацию, которая абстрактных методов в подъязычных классах, однако это функция является недостатком для краткосрочных проектов, когда разработчик имеет zeitnot.

Ответ 6

Единственная причина объявления класса как абстрактного заключается в том, что он не может быть создан. Бывают ситуации, когда у вас будет общая функциональность, которая разделяется между несколькими классами, но сама по себе эта общая функциональность не представляет собой объект или представляет неполный объект. В этом случае вы определяете общую функциональность как абстрактную, чтобы ее нельзя было создать.

Ответ 7

Это может помочь вам,        Давайте рассмотрим путешественника, который может использовать любой тип транспортного средства, будь то автомобиль, велосипед, велосипед и т.д.

но все транспортные средства движутся одинаково с разными ограничениями скорости, поэтому мы можем иметь один

abstract class Avehicle    
{  
        string fuel;  
        public void move()  
{  
 sysout("moving");  
}   
} 

но все системы взлома транспортных средств отличаются

interface Ivehicle    
{  

        public void breakorstop();  
}  
class Traveler    
{  
  Ivehicle v; 
//Settrers and getters   
 public drive()  
{  
v.move();  
}  
public break()  
{  
v.breakorstop();  
}  
}

Итак, наконец Классы автомобилей или велосипедов или велосипедов могут расширить Avehicle и реализовать интерфейс транспортного средства

Ответ 8

Абстрактные классы могут использоваться для хранения методов в "библиотеке" на основе ООП; так как класс не нуждается в создании экземпляра и не имеет никакого смысла для него, поскольку обычные статические методы внутри абстрактного класса являются обычной практикой.