Abstrakt klasse vs interface i Java
For at forstå forskellene mellem den abstrakte klasse og interface i Java er det vigtigt først og fremmest at forstå hver af disse uafhængigt. Den abstrakte klasse i Java bruges til erklæring af underklasser med et sæt fælles egenskaber. Den almindelige brug af den abstrakte klasse er en superklasse af andre klasser, som faktisk giver den mulighed for at udvide den abstrakte klasse. Et abstrakt nøgleord bruges i erklæringen af en abstrakt klasse. Ligesom enhver anden klasse ville have, har den abstrakte klasse felter, der beskriver metoder og egenskaber, som klassen kan udføre. Ved blot at erklære en abstrakt klasse, kan klassen ikke indledes
En Java-grænseflade kan sidestilles med en protokol. Det repræsenterer en forudindstillet og aftalt adfærd, der muliggør lette samspillet mellem uafhængige genstande. Afhængigt af brugeren har grænsefladen nøglen til forskellige handlinger, der implementeres. Grænsefladen fungerer derfor som en forbindelse mellem producent og forbruger. Grænseflader i Java er således en gruppe metoder, der indeholder tomme organer, der kan have konstante erklæringer. Når du udsætter en klasse for Java-grænsefladen, betyder det, at den opførsel, som forventes af klassen, er implementeringen af alle metoder til grænsefladen.
Forskelle
For det første tillader en abstrakt klasse felter, der ikke er statiske eller endelige i modsætning til de statiske og endelige felter, der bruges i grænseflader. Grænseflader kan ikke bruge nogen implementeringskode i dem, og der kan være implementeringskode, der bruges i abstrakt klasse. Implementeringskoderne, der er rullet ud i den abstrakte klasse, kan have et par eller alle de implementerede metoder. Som standard er alle metoder til grænsefladen "abstrakt."
Synlighed er også mulig for metoder eller medlemmer af en abstrakt klasse, der kan variere, såsom offentlige, beskyttede, private eller ingen. Grænsefladenes synlighed kan på den anden side kun indstilles til en synlighedstilstand, der er "offentlig."
En abstrakt klasse arver automatisk objektklassen. Dette betyder faktisk, at metoder som klon () og lig (() er inkluderet. I en grænseflade er det ikke muligt at arve objektklassen. Efter dette har den abstrakte klasse evnen til at have en konstruktør, men en grænseflade kan ikke have en.
Grænsefladen i Java har også en meget vigtig funktion med implementeringen af flere arv, da en klasse kun kan have en super klasse. Selvom kun en super klasse kan være til stede, kan den implementeres i uanset antal grænseflader. Det er ikke muligt at have flere arver i en abstrakt klasse.
Når det gælder ydeevne, har grænseflader en tendens til at være langsommere i implementering i modsætning til abstrakt klasse hovedsageligt på grund af den ekstra retning for at finde den tilsvarende metode i en klasse. Forskellen er imidlertid blevet langsommere på grund af moderne virtuelle Java-maskiner, der konstant opgraderes.
Tilføjelse af en metode i en grænseflade kræver, at du sporer alle de implementeringsklasser, der implementerer den specifikke grænseflade. Alternativt kan du udvide grænsefladen, så den får ekstra metoder. Hvis du tilfældigvis har at gøre med en abstrakt klasse, er alt det, der kræves, at tilføje standardimplementeringen af metoden, og koden fortsætter med at fungere. I det omfang der er forskelle mellem abstrakte klasser og grænseflader, er det vigtigt at bemærke, at de ikke er rivaler, men forskellene nævnt heri tjener til at supplere hinanden.
Resumé
Abstrakte klassefelter er ikke statiske eller endelige i modsætning til interface der har statiske og afsluttende tabeller.
Ingen implementeringskode kan bruges i grænseflader, mens den kan bruges i abstrakt klasse.
Grænsefladesynlighed kan kun være offentlig, mens abstrakt klassesynlighed kan variere.
En abstrakt klasse arver automatisk objektklassen, men det er ikke muligt i interface.
Abstrakt klasse er hurtigere end interface i implementering.