Рецоммендед, 2020

Избор Уредника

Разлика између интерфејса и апстрактне класе у Јава и Ц #

Интерфејс и апстрактна класа доприносе "непотпуном типу" у ООП-у. Понекад нам је потребна надкласа да бисмо дефинисали „шта да радимо“, али, не „како да радимо“, то је како да урадимо део ће бити имплементирано од стране изведене класе у складу са њеном потребом, „ интерфејс “ обезбеђује решење за ово. Понекад нам је потребна класа суперкласе која дефинира неку генерализирану структуру која се може имплементирати из изведених класа и неке специфициране структуре које се могу користити од изведених класа, а " апстрактна класа " пружа рјешење за ово. Основна разлика између интерфејса и апстрактне класе је да је интерфејс потпуно непотпун, а апстрактна класа је делимично некомплетна.

Цомпарисон цхарт

Основа за поређењеИнтерфејсАбстрацт Цласс
БасицКада имате само знање о захтевима, а не о његовој имплементацији, користите "Интерфаце".Када делимично знате о имплементацијама користите "Абстрацт цлассес".
МетходсИнтерфејс садржи само апстрактне методе.Апстрактна класа садржи апстрактне методе као и конкретне методе.
Модификатор приступа методаМетоде интерфејса су увек "Публиц" и "Абстрацт", чак и ако не декларишемо. Дакле, може се рећи 100%, чиста апстрактна класа.Није обавезно да метода у апстрактној класи буде јавна и апстрактна. Може имати и конкретне методе.
Ограничени модификатор за методеМетод интерфејса се не може декларисати са следећим модификаторима:
Публиц: Привате анд Протецтед
Абстрацт: финал, статиц, синцхронизед, нативе, стрицтфп.
Нема ограничења на модификаторе апстрактне варијабле класе.
Приступ модификатору променљивихДопуштени модификатори додира за Интерфаце варијабле су јавни, статични и коначни без обзира да ли се декларишемо или не.Варијабле у апстрактној класи не морају бити јавне, статичне, коначне.
Ограничени модификатори за променљивеВаријабле интерфејса не могу бити декларисане као приватне, заштићене, пролазне, нестабилне.Нема ограничења на модификаторе апстрактних варијабли класе.
Иницијализација варијаблиВаријабле интерфејса морају бити иницијализоване у време декларације.Није обавезно да се абстрактне варијабле класе морају иницијализовати у време када су декларисане.
Елементи и статички блоковиУнутар интерфејса не можете да декларишете инстанцу или статички блок.Апстрактна класа допушта инстанцу или статички блок унутар њега.
КонструкториНе можете да декларишете унутар интерфејса конструктора.Можете декларисати конструктор унутар апстрактне класе.

Дефиниција интерфејса

Јава не дозвољава вишеструко наслеђивање. То јест, једна класа не може наслиједити више од једне класе у исто вријеме. Разлог за то може се објаснити примјером. Претпоставимо да имамо две родитељске класе, А и Б и изведену класу Ц. Изведена класа Ц наслеђује и класе А и Б. Сада, оба имају класу А и Б имају сет метода (), онда ће то бити питање за класу Ц онај који је класа сет () метода наслеђена. Решење овог проблема је “интерфејс”.

Интерфејс је чиста апстрактна класа. Кључна реч која се користи за креирање интерфејса је "интерфејс". Пошто је сав метод унутар интерфејса потпуно апстрактан. Интерфејс само одређује шта класа мора да ради, али не дефинише како то ради. Само зато што су сви методи декларисани унутар интерфејса апстрактни, није креирана инстанца за интерфејс. Општи облик "интерфејса" у јави је:

 аццесс_специфиер интерфејс интерфаце_наме {ретурн-типе метход-наме1 (параметер-лист); ретурн-типе метход-наме2 (листа параметара); тип финал-варнаме1 = вредност; тип финал-варнаме2 = вредност; // ... ретурн-типе метход-намеН (параметер-лист); тип финал-варнамеН = вредност; } 

Спецификатор приступа је проглашен јавним јер класе морају имплементирати интерфејс.

Ми немамо концепт “Интерфаце” у Ц ++. Али, Јава и Ц # дефинишу интерфејс веома добро.

Интерфаце ин Јава:

  • Варијабле интерфејса су подразумевано увек јавне, статичне и коначне.
  • Варијабле се морају иницијализовати у тренутку декларације.
  • Варијабле се никада не могу прогласити приватним, заштићеним, пролазним и волатилним.
  • Методе сучеља су увијек јавне и апстрактне, док се оне никада не могу прогласити приватним, заштићеним, коначним, статичним, синкронизираним, изворним и стриктним.
  • Не можете да декларишете било који конструктор унутар интерфејса јер је главна сврха конструктора иницијализација променљивих класе, али у интерфејсу променљиве се иницијализују у време његове декларације.
  • Интерфејс може наследити друге интерфејсе, али класа која имплементира такав интерфејс мора да примени методе свих наслеђених интерфејса.
  • Класа може наслиједити више од једног сучеља у исто вријеме, и мора имплементирати све методе свих наслијеђених сучеља.

Општи облик имплементације интерфејса у Јави:

 цласс цласс_наме имплементира Интерфаце_наме {// цласс-боди} 

За наслеђивање интерфејса, класа користи кључну реч "имплементира", а класа имплементира све методе које је декларисао наслеђени интерфејс.

Интерфејс у ​​Ц #:

Интерфејс у ​​Ц # је скоро сличан интерфејсу у Јави осим:

  • Интерфејс у ​​Ц # не декларише променљиве.
  • Име интерфејса се поставља префиксом И и наслеђује се са знаком дебелог црева (:).

Општи облик имплементације интерфејса у Ц #:

 цласс цласс_наме: интерфаце_наме {// цласс-боди} 

Дефиниција апстрактне класе

Класа која садржи један или више апстрактних метода назива се апстрактна класа, а класа је декларисана као апстрактна помоћу кључне речи “абстрацт”, којој претходи “цласс” кључна реч на почетку декларације класе. Пошто апстрактна класа садржи апстрактну методу, она представља непотпуни тип. Дакле, не можете креирати објекте апстрактне класе. Кад год класа наслеђује апстрактну класу, она мора да имплементира све апстрактне методе апстрактне класе ако то онда не мора да буде декларисана као апстрактна. Апстрактни атрибут се наслеђује док се не постигне потпуна примена апстрактних метода.

Апстрактна класа такође може да садржи конкретне методе које се могу користити од изведене класе као што је она. Али, не можете да прогласите апстрактни конструктор или апстрактни статички метод унутар апстрактне класе. Општи облик апстрактне класе у Јави је следећи:

 абстрацт цласс цласс_наме {абстрацт метход_наме1 (); абстрацт метход_наме2 (); : ретурн_типе метход_наме3 (параметер_лист) {// цонцрете метход} ретурн_типе метход_наме4 (параметер_лист) {// цонцрете метход}}; 

Концепт апстрактне класе је сличан у Јава и Ц #. Апстрактна класа се мало разликује у Ц ++.

У Ц ++, ако класа има барем једну виртуалну функцију, класа постаје апстрактна класа. Уместо кључне речи „апстракт“, кључна реч „виртуелна“ се користи за декларисање апстрактне методе.

Кључне разлике између интерфејса и апстрактне класе у Јава и Ц #

  1. Када имате знање о томе “шта је потребно”, али не и “како би се имплементирало” онда се мора користити интерфејс. С друге стране, ако знате шта је потребно и делимично знате како ће се имплементирати онда користите апстрактну класу.
  2. Интерфејс има све своје методе апстрактне, али апстрактна класа има неке апстрактне методе и неке конкретне методе.
  3. Методе унутар интерфејса су јавне и апстрактне, па се називају и чистом апстрактном класом. С друге стране, методе унутар апстракта нису ограничене само на јавно и апстрактно.
  4. Метод интерфејса никада не може бити приватан, заштићен, коначан, статичан, синхронизован, природан или стриктан. С друге стране, не постоје ограничења на методе апстрактне класе.
  5. Варијабле у сучељу су јавне и коначне без обзира да ли их декларирамо или не, али не постоји такво ограничење на варијабле апстрактне класе да буду јавне и коначне.
  6. Варијабле у интерфејсу никада не могу бити приватно заштићене пролазне или волатилне, док не постоји ограничење на варијабле у апстрактној класи.
  7. Варијабла интерфејса мора бити иницијализована током декларације. С друге стране, променљиве у апстрактној класи могу се иницијализовати у било ком тренутку.
  8. Унутар интерфејса, инстанца или статички блок не могу бити декларисани, али можете декларисати инстанцу или статички блок унутар апстрактне класе.
  9. Не можете дефинисати конструктора унутар интерфејса, док можете дефинисати конструктор унутар апстрактне класе.

Закључак:

Када је потребно креирати базну класу која садржи генерализовани облик метода које могу бити имплементиране од стране изведених класа према њиховим потребама, концепт сучеља и апстрактне класе помаже у томе.

Top