Video: Exploring JavaScript and the Web Audio API by Sam Green and Hugh Zabriskie 2025
Både grænseflader og abstrakte klasser har abstrakte metoder i Java. Men de abstrakte metoder spiller lidt forskellige roller i disse to slags referencetyper. Hvordan kan du holde alt lige i dit sind?
Den første ting at gøre er at huske på, at ingen lærer om objektorienterede programmeringskoncepter uden at få masser af praksis i skriftlig kode. Hvis du har det, er du forvirret, kan det være en god ting. Det betyder, at du har forstået nok til at vide, hvor kompliceret denne ting er. Jo mere kode du skriver, desto mere behagelig bliver du med klasser, grænseflader og alle disse andre ideer.
Den næste ting at gøre er at sortere forskellene i, hvordan du erklærer abstrakte metoder. Her er historien.
I en abstrakt klasse | Er abstrakte metoder tilladt? | Nej | |
Ja | Ja | Kan en metodedeklaration indeholde | abstrakt |
søgeord? Nej Ja | Ja | Kan en metodedeklaration indeholde | standard |
søgeord (betyder "ikke abstrakt")? Nej Ja | Nej | Med hverken | abstrakt |
eller standard Ikke abstrakt Abstrakt | Ikke abstrakt |
|
Både grænseflader og abstrakte klasser har abstrakte metoder. Så du kan undre sig over, hvordan man skal vælge mellem at erklære en grænseflade og erklære en abstrakt klasse. Faktisk kan du spørge tre professionelle programmører, hvordan grænseflader og abstrakte klasser adskiller sig fra hinanden. Hvis du gør det, kan du få fem forskellige svar. (Ja, fem svar, ikke tre svar.) |
Udvidelse af en underklasse repræsenterer et
er et- forhold. Implementering af en grænseflade repræsenterer et kan
- forhold. Hvis du vil have mere håndgribeligt bevis på forskellen mellem en grænseflade og en abstrakt klasse, overvej dette: En klasse kan implementere mange grænseflader, men en klasse kan kun udvide en anden klasse, selvom den ene klasse er en abstrakt klasse. Så, når du har erklæret offentlig klasse Dog udvider HousePet
, kan du heller ikke
Dog
udvide en
Ven
klasse. Men du kan
Dog
implementere en
Befriendable
interface. Og så kan du gøre samme
Dog
klasse implementere en
Trainable
interface.
Og hvis du vil have en jævn
mere
håndgribelig forskel mellem en grænseflade og en abstrakt klasse, er her en for dig: En grænseflade kan ikke indeholde nogen ikke-statiske, ikke-endelige felter. Så der. Grænseflader og abstrakte klasser er forskellige fra hinanden. Men hvis du er ny på spillet, bør du ikke bekymre sig om forskellen. Bare læs så meget kode som muligt, og vær ikke bange, når du ser en abstrakt metode. Det er alt der er til det.