Forskelle mellem abstrakt klasse og interface i Java Forskel mellem

Anonim

Abstrakt klasse vs Interface i Java

For at forstå forskellene mellem den abstrakte klasse og grænsefladen i Java er det vigtigt først at forstå hver af disse selvstændigt. Den abstrakte klasse i Java bruges i erklæring af underklasser med et sæt af fælles egenskaber. Den almene brug af den abstrakte klasse er en super klasse af andre klasser, som i virkeligheden tillader det at udvide den abstrakte klasse. Et abstrakt søgeord 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 en erklæring om en abstrakt klasse kan klassen ikke påbegyndes

En Java-grænseflade kan ligestilles med en protokol. Det repræsenterer en forudindstillet og aftalt adfærd, der gør det muligt at lette samspillet mellem ikke-relaterede objekter. Afhængigt af brugeren har grænsefladen nøglen til forskellige handlinger, der implementeres. Interfacet tjener derfor som en forbindelse mellem producenten og forbrugeren. Grænseflader i Java er således en gruppe metoder, der indeholder tomme kroppe, som kan have konstante erklæringer. Ved at udsætte en klasse for Java-grænsefladen, betyder det, at den forventede opførsel af klassen er implementeringen af ​​alle metoder i grænsefladen.

Forskelle

For det første giver en abstrakt klasse områder, der ikke er statiske eller endelige i modsætning til de statiske og endelige felter, der anvendes i grænseflader. Interfaces kan ikke have nogen implementeringskode, der anvendes i dem, og der kan være implementeringskode anvendt i abstrakt klasse. Implementeringskoderne udrullet i den abstrakte klasse kan have nogle få eller alle de implementerede metoder. Som standard er alle metoder i grænsefladen "abstrakte". ”

Synlighed er også mulig for metoder eller medlemmer af en abstrakt klasse, som kan variere som offentlig, beskyttet, privat eller ingen. Interfaceets synlighed kan derimod kun indstilles til en synlighedstilstand, som er "offentlig". '"

En abstrakt klasse vil automatisk arve objektklassen. Dette betyder faktisk, at metoder som klon () og ligestillede () er inkluderet. I en grænseflade er ingen arv fra objektklassen mulig. Herefter 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 superklasse. Selv om kun en superklasse kan være til stede, kan den implementeres i uanset antal grænseflader. Det er ikke muligt at have flere arv i en abstrakt klasse.

Interface har en tendens til at være langsommere i implementeringen i modsætning til abstrakt klasse, hovedsagelig på grund af den ekstra retning at finde den tilsvarende metode i en klasse. Forskellen er dog blevet langsommere på grund af moderne Java virtuelle maskiner, der løbende bliver opgraderet.

Tilføjelse af en metode i en grænseflade kræver, at du sporer alle implementeringsklasserne, som implementerer den specifikke grænseflade. Alternativt kan du udvide grænsefladen for at give den mulighed for at have ekstra metoder. Hvis du tilfældigvis har at gøre med en abstrakt klasse, er alt, hvad der kræves, tilføjet standard implementering af metoden, og koden fortsætter med at fungere. Idet der er forskelle mellem abstrakte klasser og grænseflader, er det vigtigt at bemærke, at de ikke er rivaler, men de heri nævnte forskelle tjener til at supplere hinanden.

Sammendrag

  1. Abstrakte klassefelter er ikke statiske eller endelige i modsætning til grænsefladen, der har statiske og endelige tabeller.

  2. Ingen implementeringskode kan bruges i grænseflader, mens den kan bruges i abstrakt klasse.

  3. Grensesnittets synlighed kan kun være offentlig, mens abstrakt klassesynlighed kan variere.

  4. En abstrakt klasse vil automatisk arve objektklassen, men det er ikke muligt i grænsefladen.

  5. Abstrakt klasse er hurtigere end interface i implementering.