Priyaaammu Ответов: 4

Разница между нормальным классом и абстрактным классом


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

Sergey Alexandrovich Kryukov

Это невозможно объяснить, не зная вашего происхождения. Что мешает вам читать документацию по этому простому аспекту программирования? Вы понимаете, что такое наследование? Если да, то теперь абстрактное может быть неочевидным? Если нет, вы хотите, чтобы мы написали для вас книгу под названием "объектно-ориентированное программирование"? :-)
--СА

Priyaaammu

я не хочу, чтобы ты писал для меня книгу...что мешает вам заметить разницу в этом. Я спросил,Правильно ли я это понимаю или нет, как вы решаете, что я ничего не читал? Если ты не можешь объяснить,просто оставь это...

4 Ответов

Рейтинг:
28

Sergey Alexandrovich Kryukov

Пожалуйста, смотрите мой комментарий к этому вопросу.

Прежде всего, вопрос типа "в чем разница между {0} и {1}" не может быть справедливым. Если вам это не кажется очевидным, пожалуйста, скажите нам: в чем разница между apple и Apple? Если вы все еще не получили его, пожалуйста, прочтите мой прошлый ответ: в чем разница между классом и инкапсуляцией в программировании[^].

Кроме того, было бы неплохо узнать, что вы подразумеваете под "нормальным классом"?

Если вы хотите изучить только основы программирования, то самый важный навык объясняется здесь:
Майкрософт Q209354.

Более конкретно, вы должны понять это:
http://en.wikipedia.org/wiki/Abstract_class[^].

В частности, как это делается в .NET, это хорошо объяснено здесь, с примерами кода:
http://msdn.microsoft.com/en-us/library/ms173150.aspx[^].

Есть вопросы?

—СА


Liju Sankar

+5

Sergey Alexandrovich Kryukov

Спасибо.
—СА

Рейтинг:
2

Vani Kulkarni

Пожалуйста, пройдите по следующей ссылке в CP для хедз-апа:

Все об абстрактных классах.[^]

Также другие ссылки для вашей справки:
http://www.dofactory.com/topic/1311/why-do-we-need-to-use-abstract-class.aspx[^]
http://www.geekinterview.com/question_details/19145[^]
http://www.techotopia.com/index.php/Understanding_C_Sharp_Abstract_Classes[^]
http://www.dotnetperls.com/abstract[^]


Рейтинг:
0

ashriv

обратитесь к любой хорошей книге по c++. у вас есть много примеров в реальном времени и различий.

пройдите по этой ссылке -
абстрактный класс [^]

ОПЕРАЦИОННАЯ
абстрактный класс в java[^]


Рейтинг:
0

st4rdog

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

Пример:

public abstract class Dog
не может существовать через
Dog dog = new Dog()
но это подкласс
public class GreatDane : Dog
может существовать в мире.
GreatDane greatDane = new GreatDane()


Почему? Нет смысла создавать в мире родовую "собаку". Будучи абстрактным, оно перестает быть созданным. Он также позволяет вам иметь абстрактные шаблоны функций/заглушки, которые должны иметь все дочерние/подклассы.
public abstract class Dog
{
    public abstract void Bark(); // Note there is no code/implementation. I am just telling my children to have this function on them.
}

public class GreatDane : Dog
{
    public override void Bark()
    {
        // Unique bark like a Great Dane
    }
}


Почему бы не использовать такой интерфейс, как IBarkable?
Вы могли бы, но наличие базового класса "собака" допускает общее/общее поведение. У вас могут быть обычные функции, виртуальные функции или абстрактные функции.

Например, если 90% собак лают одинаково, вы можете сделать Bark() виртуальным, поэтому существует реализация default/shared/common.
public abstract class Dog // Abstract so it can't be instantiated, even though there are no abstract functions
{
    public virtual void Bark()
    {
        // Default (but overridable) barking code. Some dogs use this code.
    }

    public void WagTail()
    {
        // Only code that exists to wag tail. All dogs use this code.
    }

}

public class GreatDane : Dog
{
    // I will be lazy and use the base class's Bark()
}

public class Rottweiler : Dog
{
    public override void Bark()
    {
        // I will use this unique bark.
    }
}

С интерфейсами каждый Bark() был бы уникален, что привело бы к копированию и вставке кода.