Nøgleforskel: Interface eller en protokol er en fælles måde, der tillader uafhængige objekter at kommunikere med hinanden. Det repræsenterer en aftalt adfærd, der letter samspillet mellem de to objekter. En abstrakt klasse er en klasse af objekter, der ikke kan opstilles eller opstilles en forekomst af et objekt. Denne klasse kan ikke have nogen implementering eller kan have ufuldstændig implementering.

Java er et programmeringssprog, som er blevet påvirket af C-sproget. Det hidrører meget af sin syntaks fra C og C ++, men det har færre lavniveau faciliteter end. Java er et generel programmeringssprog, der er designet til at have færre implementeringsafhængigheder i forhold til tidligere sprog. Det er samtidige, klassebaseret og et objektorienteret sprog.
Java blev udviklet af James Gosling hos Sun Microsystems og blev udgivet i 1995. Det blev oprindeligt frigivet som en kerne komponent i Sun Microsystems 'Java-platform. Sun har siden licenseret de fleste af dets Java-teknologier under GNU General Public License. Det betyder, at al den teknologi, der er licenseret under GNU General Public License, er åben kilde og generelt tilgængelig uden omkostninger. Sun Microsystems fusionerede til sidst Oracle Corporation. Fra og med 2012 er Java blevet et af de mest populære programmeringssprog til brug. Dette gælder især for klientserver-webapplikationer. Mange andre systemer har udviklet alternative implementeringer af Sun teknologier, såsom GNU Compiler til Java og GNU Classpath.

En abstrakt klasse er en klasse af objekter, der ikke kan opstilles eller opstilles en forekomst af et objekt. Denne klasse kan ikke have nogen implementering eller kan have ufuldstændig implementering. Det kan også have abstrakte metoder eller egenskaber, som deles af alle underklasser. På nogle programmeringssprog er abstrakte typer uden implementering kendt som grænseflader. I Java kan en abstrakt type oprettes ved hjælp af nøgleordet 'abstrakt' i klassen definitionen. Formålet med at have en abstrakt klasse til at placere alle de metoder, der ikke implementeres i abstrakt klassen og overlade det til underklassen for at bestemme, hvordan man implementerer disse klasser. Hvis en klasse har en enkelt abstrakt metode, skal klassen erklæres som en abstrakt klasse, selv om man ikke behøver at have mindst en enkelt metode til at erklære en klasse abstrakt.
Malliktalksjava.in viser de store forskelle mellem grænseflade og abstrakt som:
- Abstrakt klasse har konstruktøren, men grænsefladen gør det ikke.
- Abstrakte klasser kan have implementeringer for nogle af dets medlemmer (Metoder), men grænsefladen kan ikke have implementering for nogen af dens medlemmer.
- Abstrakte klasser skal have underklasser ellers, der vil være ubrugelige.
- Grænseflader skal have implementeringer af andre klasser ellers, der vil være ubrugelige
- Kun en grænseflade kan udvide en anden grænseflade, men enhver klasse kan udvide en abstrakt klasse.
- Alle variabler i grænseflader er som standard endelige
- Grænseflader giver en form for multipel arv. En klasse kan kun udvide en anden klasse.
- Grænseflader er begrænset til offentlige metoder og konstanter uden gennemførelse. Abstrakte klasser kan have en delvis implementering, beskyttede dele, statiske metoder mv.
- En klasse kan implementere flere grænseflader. Men i tilfælde af abstrakt klasse kan en klasse kun udvide en abstrakt klasse.
- Interfaces er langsomme, da det kræver ekstra indirection at finde tilsvarende metode i den aktuelle klasse. Abstrakte klasser er hurtige.
- Tilgængelighedsmodifikator (Offentlig / Privat / Intern) er tilladt for abstrakt klasse. Interface tillader ikke tilgængelighed modifikator
- En abstrakt klasse kan indeholde komplette eller ufuldstændige metoder. Grænseflader kan kun indeholde underskrift af en metode, men ingen krop. En abstrakt klasse kan således implementere metoder, men en grænseflade kan ikke implementere metoder.
- En abstrakt klasse kan indeholde felter, konstruktører eller destruktorer og implementere egenskaber. En grænseflade kan ikke indeholde felter, konstruktører eller destruktorer, og den har kun egenskabens underskrift, men ingen implementering.
- Forskellige adgangsmodifikatorer som abstrakte, beskyttede, interne, offentlige, virtuelle osv. Er nyttige i abstrakte klasser, men ikke i grænseflader.
- Abstrakt omfang er op til afledt klasse.
- Interface omfang er op til ethvert niveau af sin arvskæde.
Oplysningerne til tabellen er tillykke med codeproject.com og mindprod.com
grænseflade | Abstrakt klasse | |
Flere arv | En klasse kan arve flere grænseflader. | En klasse kan arve kun en abstrakt klasse. |
Standard implementering | En grænseflade kan ikke give nogen kode, bare signaturen. | En abstrakt klasse kan give fuldstændig, standardkode og / eller bare de detaljer, der skal overstyres. |
Adgang modifikatorer | En grænseflade kan ikke have adgangsmodifikatorer til subs, funktioner, egenskaber osv alt antages som offentligt. | En abstrakt klasse kan indeholde adgangsmodifikatorer til subs, funktioner, egenskaber. |
Core vs Peripheral | Grænseflader bruges til at definere en klasses perifere evner. Med andre ord kan både menneske og køretøj arve fra en IMovable-grænseflade. | En abstrakt klasse definerer kerneidentiteten af en klasse, og der bruges den til genstande af samme type. |
homogenitet | Hvis forskellige implementeringer kun deler metodesignaturer, er det bedre at bruge grænseflader. | Hvis forskellige implementeringer er af samme art og bruger fælles adfærd eller status, er abstrakt klasse bedre at bruge. |
Hastighed | Kræver mere tid til at finde den egentlige metode i de tilsvarende klasser. | Hurtig |
Tilføjelse af funktionalitet | Hvis vi tilføjer en ny metode til et grænseflade, skal vi spore alle implementeringer af grænsefladen og definere implementering for den nye metode. | Hvis vi tilføjer en ny metode til en abstrakt klasse, har vi mulighed for at levere standard implementering, og derfor kan al eksisterende kode fungere korrekt. |
Felter og Konstanter | Ingen felter kan defineres i grænseflader. | En abstrakt klasse kan have områder og konstanter defineret. |
terseness | De konstante erklæringer i en grænseflade er alle formodede offentlige statiske finale. | Fælles kode kan tilføjes i en abstrakt klasse. |
Konstanter | Kun statiske endelige konstanter, kan bruge dem uden kvalifikation i klasser, der implementerer grænsefladen. | Både forekomst og statiske konstanter er mulige. Både statisk og instans intialiser kode er også mulig at beregne konstanterne. |
Tredjeparts bekvemmelighed | En grænsefladeimplementering kan tilføjes til en eksisterende tredjepartsklasse. | En tredjepartsklasse skal omskrives for kun at udvide fra den abstrakte klasse. |
er-en vs. -bar eller can-do | Interfaces bruges ofte til at beskrive en klasses perifere evner, ikke dens centrale identitet, f.eks. En Automobile klasse kan implementere den genbrugelige grænseflade, som kunne gælde for mange ellers helt uafhængige objekter. | En abstrakt klasse definerer sine efterkommers kerneidentitet. Implementerede grænseflader opregner de generelle ting, en klasse kan gøre, ikke de ting, en klasse er. I en Java-kontekst skal brugerne typisk implementere Runnable-grænsefladen i stedet for at udvide Thread, fordi de ikke er interesserede i at give noget nyt Trådfunktionalitet, de vil normalt kun have en kode, der har mulighed for at køre uafhængigt. De ønsker at skabe noget, der kan køres i en tråd, ikke en ny slags tråd. Den lignende er-en vs-har en debat op, når du beslutter dig for at arve eller delegere. |
Plug-in | Brugeren kan skrive et nyt udskiftningsmodul til en grænseflade, der ikke indeholder en enkelt kode med fælles til de eksisterende implementeringer. Når brugeren implementerer grænsefladen, starter de fra bunden uden nogen standard implementering. Brugeren skal indhente værktøjer fra andre klasser; intet kommer med grænsefladen andet end nogle få konstanter. Dette giver brugeren frihed til at implementere et radikalt andet internt design. | Brugeren skal bruge den abstrakte klasse som-er til kodebasis, med al sin bagage, god eller dårlig. Den abstrakte klassens forfatter har pålagt brugeren en struktur. |
Vedligeholdelse | Hvis klientkoden kun taler i form af en grænseflade, kan du nemt ændre den konkrete implementering bagved den ved hjælp af en fabriksmetode. | Hvis klientkode kun taler i form af en abstrakt klasse, kan du nemt ændre den konkrete implementering bagved den ved hjælp af en fabriksmetode. |