Video: Exploring JavaScript and the Web Audio API by Sam Green and Hugh Zabriskie 2025
Både grensesnitt og abstrakte klasser har abstrakte metoder i Java. Men de abstrakte metodene spiller litt forskjellige roller i disse to typer referansetyper. Hvordan kan du holde alt rett i tankene dine?
Det første du må gjøre er å huske at ingen lærer om objektorienterte programmeringskonsepter uten å få mye å øve på å skrive kode. Hvis du har det du er forvirret, kan det være en god ting. Det betyr at du har forstått nok til å vite hvor komplisert dette er. Jo mer kode du skriver, jo mer komfortabel blir du med klasser, grensesnitt og alle disse andre ideene.
Den neste tingen å gjøre er å sortere ut forskjellene i måten du erklærer abstrakte metoder på. Her er historien.
I en vanlig klasse (ikke-abstrakt) | I et grensesnitt | I en abstrakt klasse | |
Gis abstrakte metoder tillatt? | Nei | Ja | Ja |
Kan en metodedeklarasjon inneholde abstrakt søkeord? | Nei | Ja | Ja |
Kan en metodedeklarasjon inneholde standard søkeordet (betyr "ikke abstrakt")? | Ingen | Ja | Ingen |
Med hverken abstrakt eller standard | Ikke abstrakt | Abstract | Ikke abstrakt |
Både grensesnitt og abstrakte klasser har abstrakte metoder. Så du lurer kanskje på hvordan du bør velge mellom å erklære et grensesnitt og erklære en abstrakt klasse. Faktisk kan du spørre tre profesjonelle programmerere hvordan grensesnitt og abstrakte klasser skiller seg fra hverandre. Hvis du gjør det, kan du få fem forskjellige svar. (Ja, fem svar, ikke tre svar.)
Grensesnitt og abstrakte klasser er liknende dyr, og de nye funksjonene i Java 8 gjorde dem enda mer lik den i tidligere Java-versjoner. Men den grunnleggende ideen handler om forholdet mellom ting.
- Forlengelse av en underklasse representerer et forhold.
- Implementering av et grensesnitt representerer et forhold på kan.
Hvis du vil ha mer konkret bevis på forskjellen mellom et grensesnitt og en abstrakt klasse, vurder dette: En klasse kan implementere mange grensesnitt, men en klasse kan utvide bare en annen klasse, selv om den ene klassen er en abstrakt klasse. Så, etter at du har erklært
offentlig klasse, Dog utvider HousePet
, kan du heller ikke
Dog
utvide en
Venn
klasse. Men du kan gjøre
Dog
implementere et
Befriendable
-grensesnitt. Og så kan du lage samme
Dog
-grensesnittet
Trenbar
.
Og hvis du vil ha en jevn mer konkret forskjell mellom et grensesnitt og en abstrakt klasse, er dette en for deg: Et grensesnitt kan ikke inneholde noen ikke-statiske, ikke-endelige felt.
Så der. Grensesnitt og abstrakte klasser er forskjellige fra hverandre. Men hvis du er ny på spillet, bør du ikke bekymre deg for forskjellen. Bare les så mye kode som mulig, og vær ikke redd når du ser en abstrakt metode. Det er alt der er til det.
