Video: Function program in java example 2024
Beide interfaces en abstracte klassen hebben abstracte methoden in Java. Maar de abstracte methoden spelen iets verschillende rollen in deze twee soorten referentietypen. Hoe kun je het allemaal recht houden?
Het eerste dat u moet doen, is onthouden dat niemand leert over objectgeoriënteerde programmeerconcepten zonder veel oefening te hoeven doen in het schrijven van code. Als je hebt dat je in de war bent, kan dat een goede zaak zijn. Het betekent dat je genoeg hebt begrepen om te weten hoe ingewikkeld dit spul is. Hoe meer code je schrijft, hoe comfortabeler je wordt met lessen, interfaces en al die andere ideeën.
Het volgende dat u moet doen is de verschillen opzoeken in de manier waarop u abstracte methoden declareert. Dit is het verhaal.
In een gewone (niet-abstracte) klasse | in een interface | In een abstracte klasse | |
Zijn abstracte methoden toegestaan? | Nee | Ja | Ja |
Kan een methode-declaratie het abstracte zoekwoord bevatten? | Nee | Ja | Ja |
Kan een methodedeclaratie het standaard sleutelwoord bevatten (wat betekent "niet abstract")? | Nee | Ja | Nee |
Met noch de abstract noch de standaard | Niet abstract | Abstract | Niet abstract |
Beide interfaces en abstracte klassen hebben abstracte methoden. Dus je vraagt je misschien af hoe je moet kiezen tussen het declareren van een interface en het declareren van een abstracte klasse. In feite zou je drie professionele programmeurs kunnen vragen hoe interfaces en abstracte klassen van elkaar verschillen. Als je dat doet, krijg je mogelijk vijf verschillende antwoorden. (Ja, vijf antwoorden, niet drie antwoorden.)
Interfaces en abstracte klassen zijn vergelijkbare beesten en de nieuwe functies in Java 8 maakten ze zelfs meer vergelijkbaar dan in eerdere Java-versies. Maar het basisidee gaat over de relaties tussen dingen.
- Het uitbreiden van een subklasse vertegenwoordigt een is een relatie.
- Het implementeren van een interface vertegenwoordigt een relatie.
Als u meer tastbaar bewijs wilt van het verschil tussen een interface en een abstracte klasse, overweeg dan: Een klasse kan vele interfaces implementeren, maar een klasse kan slechts één andere klasse uitbreiden, zelfs als die ene klasse een abstracte klasse is. Dus, nadat je
openbare klasse Dog hebt uitgedeeld, verlengt HousePet
kun je
Dog
ook niet een
Friend
-klasse uitbreiden. Maar je kunt
Dog
een
Befriendable
-interface laten implementeren. En dan kun je dezelfde
Dog
-klasse een
Trainbare
-interface laten implementeren.
En als u een nog meer tastbaar verschil wilt tussen een interface en een abstracte klasse, ziet u hier een voor u: een interface mag geen niet-statische, niet-definitieve velden bevatten.
Dus daar. Interfaces en abstracte klassen verschillen van elkaar. Maar als je nieuw bent in het spel, moet je je geen zorgen maken over het verschil. Lees net zoveel code als je kunt en word niet bang als je een abstracte methode ziet. Dat is alles wat er is.