Nøkkelforskjell: Grensesnitt eller en protokoll er en vanlig måte som tillater at ikke-relaterte objekter kommuniserer med hverandre. Den representerer en avtalt oppførsel som letter samspillet mellom de to objektene. En abstrakt klasse er en klasse av objekter som ikke kan bli instantiated eller sette opp en forekomst av et objekt. Denne klassen kan ha ingen implementering eller kan ha ufullstendig implementering.
Java er et programmeringsspråk, som har blitt påvirket av C-språket. Det henter mye av sin syntaks fra C og C ++, men det har færre lavnivå fasiliteter enn heller. Java er et generell programmeringsspråk som er utformet for å ha færre implementasjonsavhengigheter i forhold til tidligere språk. Det er samtidig, klassebasert og et objektorientert språk.
Java ble utviklet av James Gosling ved Sun Microsystems og ble utgitt i 1995. Den ble opprinnelig utgitt som en sentral komponent i Sun Microsystems Java-plattform. Sun har siden lisensiert det meste av sin Java-teknologi under GNU General Public License. Dette betyr at all teknologi som er lisensiert under GNU General Public License, er åpen kildekode og generelt tilgjengelig uten omkostninger. Sun Microsystems sluttet seg til Oracle Corporation. Fra og med 2012 har Java blitt et av de mest populære programmeringsspråkene for bruk. Dette gjelder spesielt for klient-server webapplikasjoner. Mange andre systemer har utviklet alternative implementeringer av Sun-teknologier, for eksempel GNU Compiler for Java og GNU Classpath.
En abstrakt klasse er en klasse av objekter som ikke kan bli instantiated eller sette opp en forekomst av et objekt. Denne klassen kan ha ingen implementering eller kan ha ufullstendig implementering. Det kan også ha abstrakte metoder eller egenskaper som deles av alle underklasser. I noen programmeringsspråk er abstrakte typer uten implementering kjent som grensesnitt. I Java kan en abstrakt type opprettes ved hjelp av søkeordet "abstrakt" i klasset definisjonen. Formålet med å ha en abstrakt klasse å plassere alle metodene som ikke er implementert i abstrakt klassen, og la det gå til underklassen for å bestemme hvordan man implementerer disse klassene. Hvis en klasse har en enkelt abstrakt metode, må klassen bli erklært som en abstrakt klasse, selv om man ikke trenger å ha minst en enkelt metode for å erklære en klasse abstrakt.
Malliktalksjava.in viser de store forskjellene mellom grensesnitt og abstrakt som:
- Abstrakt klasse har konstruktøren, men grensesnittet gjør det ikke.
- Abstrakte klasser kan ha implementeringer for noen av sine medlemmer (Methods), men grensesnittet kan ikke ha implementering for noen av sine medlemmer.
- Abstrakte klasser bør ha underklasser annet som vil være ubrukelig.
- Grensesnitt må ha implementeringer av andre klasser ellers som vil være ubrukelige
- Bare et grensesnitt kan utvide et annet grensesnitt, men noen klasser kan forlenge en abstrakt klasse.
- Alle variabler i grensesnitt er standard som standard
- Grensesnitt gir en form for flere arv. En klasse kan utvide bare en annen klasse.
- Grensesnitt er begrenset til offentlige metoder og konstanter uten implementering. Abstrakte klasser kan ha delvis implementering, beskyttede deler, statiske metoder, etc.
- En klasse kan implementere flere grensesnitt. Men i tilfelle abstrakt klasse, kan en klasse utvide kun en abstrakt klasse.
- Grensesnitt er treg da det krever ekstra innireksjon for å finne tilsvarende metode i selve klassen. Abstrakte klasser er raske.
- Tilgjengelighet modifikator (offentlig / privat / intern) er tillatt for abstrakt klasse. Grensesnitt tillater ikke tilgjengelighetsmodifikator
- En abstrakt klasse kan inneholde komplette eller ufullstendige metoder. Grensesnitt kan bare inneholde signatur av en metode, men ingen kropp. Dermed kan en abstrakt klasse implementere metoder, men et grensesnitt kan ikke implementere metoder.
- En abstrakt klasse kan inneholde felt, konstruktører eller destruktorer og implementere egenskaper. Et grensesnitt kan ikke inneholde felt, konstruktører eller destruktorer, og det har bare egenskapens signatur, men ingen implementering.
- Ulike tilgangsmodifikatorer som abstrakte, beskyttede, interne, offentlige, virtuelle osv. Er nyttige i abstrakte klasser, men ikke i grensesnitt.
- Abstrakt omfang er opp til avledet klasse.
- Grensesnittets omfang er opp til et hvilket som helst nivå i arvskjeden.
Informasjonen for tabellen er høflighet av codeproject.com og mindprod.com
Interface | Abstrakt klasse | |
Flere arv | En klasse kan arve flere grensesnitt. | En klasse kan arve bare en abstrakt klasse. |
Standard implementering | Et grensesnitt kan ikke gi noen kode, bare signaturen. | En abstrakt klasse kan gi fullstendig, standardkode og / eller bare detaljene som må overskrides. |
Tilgangsmodifiseringer | Et grensesnitt kan ikke ha tilgangsmodifiseringer for subs, funksjoner, egenskaper etc alt antas som offentlig. | En abstrakt klasse kan inneholde tilgangsmodifikatorer for subs, funksjoner, egenskaper. |
Core vs Peripheral | Grensesnitt brukes til å definere perifere evner i en klasse. Med andre ord kan både menneske og kjøretøy arve fra et uavhengig grensesnitt. | En abstrakt klasse definerer kjerneidentiteten til en klasse og der den brukes til objekter av samme type. |
homogenitet | Hvis ulike implementeringer bare deler metodesignaturer, er det bedre å bruke grensesnitt. | Hvis ulike implementeringer er av samme type og bruker vanlig oppførsel eller status, er abstrakt klasse bedre å bruke. |
Hastighet | Krever mer tid for å finne den faktiske metoden i de tilsvarende klassene. | Rask |
Legge til funksjonalitet | Hvis vi legger til en ny metode til et grensesnitt, må vi spore alle implementeringer av grensesnittet og definere implementering for den nye metoden. | Hvis vi legger til en ny metode i en abstrakt klasse, har vi muligheten til å levere standard implementering og derfor kan all eksisterende kode fungere skikkelig. |
Felt og Konstanter | Ingen felt kan defineres i grensesnitt. | En abstrakt klasse kan ha felt og konstanter definert. |
terseness | De konstante erklæringene i et grensesnitt er alle antatte offentlige statiske finaler. | Felles kode kan legges inn i en abstrakt klasse. |
konstanter | Bare statiske endelige konstanter, kan bruke dem uten kvalifisering i klasser som implementerer grensesnittet. | Både forekomst og statiske konstanter er mulige. Både statisk og eksempel intialiser kode er også mulig å beregne konstantene. |
Tredjeparts bekvemmelighet | Et grensesnitt implementering kan legges til en eksisterende tredjepart klasse. | En tredjepartsklasse må omskrives for å bare utvides fra abstraktklassen. |
er-en vs. -bar eller can-do | Grensesnitt brukes ofte til å beskrive en klasses perifere evner, ikke dens sentrale identitet, f.eks. En Automobile-klasse kan implementere det resirkulerbare grensesnittet, som kan gjelde for mange ellers helt urelaterte objekter. | En abstrakt klasse definerer kjerneidentiteten til sine etterkommere. Implementerte grensesnitt teller de generelle tingene en klasse kan gjøre, ikke tingene en klasse er. I en Java-kontekst bør brukerne vanligvis implementere Runnable-grensesnittet i stedet for å utvide Thread, fordi de ikke egentlig er interessert i å gi noen ny Trådfunksjonalitet, de vil normalt bare ha en kode som har mulighet til å kjøre selvstendig. De vil lage noe som kan kjøres i en tråd, ikke en ny type tråd. Den samme er-en vs-en debatt kommer opp når du bestemmer deg for å arve eller delegere. |
Plugg inn | Brukeren kan skrive en ny erstatningsmodul for et grensesnitt som ikke inneholder en kodenavn som er felles med eksisterende implementeringer. Når brukeren implementerer grensesnittet, starter de fra bunnen av uten standard implementering. Brukeren må skaffe verktøy fra andre klasser; ingenting kommer med grensesnittet annet enn noen få konstanter. Dette gir brukeren frihet til å implementere en radikalt annen intern design. | Brukeren må bruke den abstrakte klassen som er for kodebase, med all sin tilhørende bagasje, bra eller dårlig. Den abstrakte klassen forfatteren har lagt struktur på brukeren. |
Vedlikehold | Hvis klientkoden bare snakker i forhold til et grensesnitt, kan du enkelt endre den konkrete implementeringen bak den, ved hjelp av en fabrikkmetode. | Hvis klientkoden bare snakker i form av en abstrakt klasse, kan du enkelt endre den konkrete implementeringen bak den, ved hjelp av en fabrikkmetode. |