Апстрактна класа је класа која је намењена само за основну класу других класа. 'Апстрактни' модификатор се користи за прављење апстракта класе. Апстрактни модификатор указује да постоји нека недостајућа имплементација коју треба имплементирати у класу изведену из ње. Апстрактна класа може имати апстрактне и не-апстрактне чланове. Апстрактна класа треба да има барем једну апстрактну методу, у супротном нема сврхе да се та класа прогласи 'апстрактном'.
Пример апстрактне класе у Ц #:
абстрактнаа класа МиЦирцле {абстрацт публиц инт Ареа (); } Цласс МиАреа: МиЦирцле {публиц оверриде инт Ареа () {повратна страна * страна; .....}}1 2 3 4 5 6 7 8 9 10 11 | абстрактнаа класа МиЦирцле {абстрацт публиц инт Ареа (); } Цласс МиАреа: МиЦирцле {публиц оверриде инт Ареа () {повратна страна * страна; . . . . . }} |
Као што је приказано у горњем примеру, апстрактни метод 'Ареа' унутар класе МиЦирцле је надјачан у изведеној класи МиАреа.
Интерфејс
Интерфејс садржи само декларацију чланова укључујући методе, својства, догађаје или индексере. Не садржи имплементацију ових чланова. Класа или структура имплементира интерфејс, мора да обезбеди дефиницију метода декларисаних у интерфејсу. То значи да интерфејс обезбеђује стандардну структуру коју изведена класа треба да прати.
Пример интерфејса у Ц #:
усинг Систем.Цоллецтионс.Генериц; усинг Систем.Линк; усинг Систем.Тект; намеспаце МиНаме {публиц интерфаце МиДата {воид гетдата (); воид сховдата (); } публиц цласс НамеДата: МиДата {публиц доубле гетдата () {стринг наме; Цонсоле.ВритеЛине ("Унесите име:"); наме = Цонсоле.РеадЛине (); } публиц воид сховдата () {Цонсоле.ВритеЛине ("Моје име је:", име); }}}1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | усинг Систем. Цоллецтионс. Општи ; усинг Систем. Линк; усинг Систем. Тект; намеспаце МиНаме {публиц интерфаце МиДата {воид гетдата (); воид сховдата (); } публиц цласс НамеДата: МиДата {публиц доубле гетдата () {стринг наме; Конзола. ВритеЛине ("Унесите име:"); наме = Конзола. РеадЛине (); } публиц воид сховдата () {Цонсоле. ВритеЛине ("Моје име је:", име); }}} |
Као што је приказано у горњем примеру, интерфејс МиДата има две декларације метода гетдата () и сховдата (). Класа НамеДата која имплементира овај интерфејс треба да да дефиницију метода декларисаних у МиДата интерфејсу.
Разлика између апстрактне класе и интерфејса
- Апстрактна класа може имати апстрактне и не-апстрактне чланове. Али, у интерфејсу, сви чланови су имплицитно апстрактни и морају бити надјачани у изведеној класи.
- Класа може наследити неколико интерфејса, али само једну апстрактну класу.
- Апстрактна класа може да садржи методе са или са дефиницијом. Али, интерфејс може да садржи само потпис методе.
- Апстрактна класа се може у потпуности, делимично или уопште не имплементирати, али интерфејс треба да буде у потпуности имплементиран, тј. Сви чланови морају бити дефинисани у класи деривинг.
- Интерфејс не може да садржи модификаторе приступа, али апстрактна класа га може имати за функције, својства или догађаје.