.NET- India Ответов: 1

Абстрактный класс, объект производного класса в языке Си#


Привет,

У меня есть ребенок. абстрактный класс 'AbsBase' наличие метода getDetails и там есть производный класс 'DerivedBase' что такое реализация getDetails способ получения AbsBase как показано ниже......
public abstract class AbsBase
{
   public abstract void getDetails();
} 

public class DerivedBase : AbsBase
{
   public override void getDetails()
     {
        //Implementation code
     }
}

AbsBase obj =new DerivedBase();

так что же такое "obj" здесь из "AbsBase" или то, что мы здесь называем возражением....

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

абстрактный класс невозможно создать экземпляр.......

PIEBALDconsult

Вы хотите сказать, что этот код не будет компилироваться? Так и должно быть.

1 Ответов

Рейтинг:
2

OriginalGriff

Абстрактные классы не могут быть созданы, нет - в этом весь смысл. Они представляют собой "общий базовый класс", из которого выводятся конкретные примеры.
Например, класс автомобиля был бы абстрактным и дал бы начало производным конкретным классам FordFiesta1300, MercedesA180CDi, ToyotaHiLux и т. д. - потому что вы не покупаете "автомобиль", вы покупаете "Ford Fiesta 1300", или "Mercedes A250e", или ...
Автомобиль описывает все детали, которые делают его "автомобилем" : двигатель, рулевое колесо, водительское сиденье, четыре колеса и так далее; в то время как MercedesA180CDi заполняет детали: "2L Turbo Diesel", "форма кузова W169" и так далее. Фактический экземпляр автомобиля "мой автомобиль" добавляет детали, которые отличают его от всех других A180CDis: цвет, VIN-номер, регистрационный номер, зарегистрированный владелец, текущее местоположение, текущая скорость, уровень топлива в баке и так далее.

В вашем примере:

AbsBase obj =new DerivedBase();

obj имеет тип AbsBase, что означает, что он может содержать экземпляр любого класса, производного от AbsBase.
В автомобильном выражении:
Car myCar = new MercedesA180CDi(Color.Black, "WDD169000J000000, "XX 99 XXX", originalGriff);
myCar может вместить любой тип автомобиля - Форд, Мерседес, Ситроен, ... потому что все такие транспортные средства являются производными от абстрактного базового класса автомобиля.

Система сортирует из отдельного экземпляра, какой метод она должна вызывать, когда вы пытаетесь получить доступ к методу базового класса:
myCar.Drive();

Или
obj.getDetails();


В этом есть смысл?