Member 12667612 Ответов: 3

В чем разница между абстрактным классом и обычным публичным классом?


В чем разница между абстрактным классом и обычным публичным классом?

Примечание:
Я видел много различий, но мне нужно знать, что "использование наследования абстрактного класса "в то время как" наследование публичного класса " выполняет ту же функцию.
Из приведенного ниже примера,
1. Хотите знать разницу между( C : A и C:B )

Что я уже пробовал:

публичный абстрактный класс а
{
//некоторые участники;
}

общественного класса B
{
//некоторые участники;
}

открытый класс Си :
{
// доступ к членам группы " А";
}


публичный класс C : B
{
// доступ к членам группы "B"
}

3 Ответов

Рейтинг:
2

OriginalGriff

Разница не в классе C - она в природе абстрактного класса по сравнению с "нормальным" классом: абстрактный класс не может быть создан, а конкретный класс, производный от абстрактного класса, должен реализовывать все абстрактные члены базового класса.

Все это означает, что вы не можете этого сделать:

public abstract class A
    {
    }
...
    A a = new A();
Потому что компилятор будет жаловаться, что A не является конкретным классом.
Это действительно полезно, когда вам нужен класс для обеспечения общего поведения, но он бесполезен как экземпляр сам по себе.
Например, у вас может быть абстрактный класс автомобиля, который объявляет абстрактный метод привода, и все производные классы модели производителя должны его реализовать. Вы можете управлять любым экземпляром автомобиля, но чтобы получить автомобиль, который вы действительно можете купить, это должен быть FordFiesta, или Mercedes-Benz, или MiniCooper. Это "конкретные классы" автомобилей, для которых могут быть созданы экземпляры.


Member 12667612

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

OriginalGriff

Прочтите, что я сказал!

Рейтинг:
2

Swinkaran

Я собираюсь ответить на ваш вопрос с точки зрения "почему мы используем абстрактный класс".

Абстрактный класс имеет следующие особенности по сравнению с неабстрактным классом("нормальный класс" это то, что вы говорите или Интерфейс).

Абстрактный класс может иметь как абстрактный метод, так и неабстрактный метод, например -

abstract class ExampleClass
      {
            //This is a Non-abstract method
            public int Add(int Num1, int Num2)
            {
                return Num1 + Num2;
            }

            //This is an abstract method
            //This method will be overridden in the derived class
            public abstract int Subtract(int Num1, int Num2);
      }


Функциональность абстрактных классов может быть расширена еще больше, не изменяя их дочерние классы.
Подумайте, что у вас есть интерфейс в вашем проекте под названием IExample. Теперь, если вы вносите какие-либо изменения в этот интерфейс, все его дочерние классы будут иметь эффект.

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

Наконец, полная характеристика абстрактного класса может быть понята только путем реализации этого в проекте проектирования и экспериментирования, а не попытки понять теоретически.


ZurdoDev

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

Swinkaran

Спасибо Райану за исправление, я случайно включил его. Обновленный.

Рейтинг:
2

hemantkulshrestha

Абстрактный класс-это наполовину определенный класс, в котором мы определяем абстрактные методы, которые будут реализованы дочерними классами.
Мы должны использовать абстрактные классы по следующей причине:
1. сохранить некоторый общий код в базовом классе
2. обеспечить соблюдение правил в иерархии классов, которым будут следовать ваши дочерние классы и реализовывать абстрактные методы