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

Аутор: Laura McKinney
Датум Стварања: 1 Април 2021
Ажурирати Датум: 10 Може 2024
Anonim
Разлика између сучеља и апстрактне класе у Јава & Ц # - Технологија
Разлика између сучеља и апстрактне класе у Јава & Ц # - Технологија

Садржај


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

  1. Упоредни графикон
  2. Дефиниција
  3. Кључне разлике
  4. Закључак

Упоредни графикон

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


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

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

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


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

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

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

Интерфејс на Јави:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Закључак:

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