/ / Elementen van het Java-objectmodel: abstracte klasse, interface

Elementen van het Java-objectmodel: abstracte klasse, interface

Het hoofdidee van een abstracte les zit vervat in de volgende scriptie: soms zijn geen kant-en-klare lessen nodig, maar in een "ruwe" vorm. Dergelijke voorinstellingen kunnen niet rechtstreeks worden gebruikt (geïnstantieerd).

Java abstracte klasse

Wat is een abstracte klasse in Java

Laten we naar een ander voorbeeld kijken.Er is een abstracte klasse Kalender in Java in het pakket Java.util. Het implementeert geen specifieke kalender die bijvoorbeeld wordt gebruikt in West- en Oost-Europa, China, Noord-Korea, Thailand, enz. Maar het heeft veel handige functies, bijvoorbeeld het toevoegen van meerdere dagen aan een specifieke datum: deze functies zijn vereist voor elke kalender implementatie. U kunt geen instantie uit een abstracte klasse spawnen.

Abstracte klassen, abstracte Java-methoden

Laten we zeggen dat je verschillende afbeeldingen moet ontwikkelenelementen, bijvoorbeeld geometrische vormen: cirkel, rechthoek, ster, enz. En er is een container die ze tekent. Elk onderdeel heeft een ander uiterlijk, dus de bijbehorende methode (laten we het verf noemen) wordt anders geïmplementeerd. Elke component heeft echter veel gemeen: de vormen moeten in een rechthoek worden ingeschreven, ze kunnen een kleur hebben, zichtbaar en onzichtbaar zijn, enz. Dat wil zeggen dat u voor al deze vormen een bovenliggende klasse moet maken, waarbij elke component gemeenschappelijke eigenschappen zal erven.

abstracte klassen abstracte java-methoden
Maar hoe zit het met de verfmethode?De bovenliggende klasse heeft immers geen visuele representatie. Als u de verfmethode in elke klasse afzonderlijk declareert, moet u analyseren welk onderdeel wordt verwerkt en vervolgens de typeconversie uitvoeren. Daarom moet de methode abstract worden gedeclareerd in de bovenliggende klasse: zet de methodeheader zonder body. En elke afgeleide klasse zal zijn lichaam beschrijven. In Java kan een abstracte klasse abstracte methoden verpakken.

Als de klasse abstracte methoden heeft, dande klas is abstract. Het trefwoord abstract wordt voor het klassenwoord geplaatst, en ook in de methodeheader. Na de titel van een dergelijke methode moet een puntkomma worden geplaatst. In Java kan een abstracte klasse geen instanties maken. Als we hun creatie willen verbieden, zelfs als de klasse geen abstracte methoden heeft, kan de klasse abstract worden verklaard. Maar als de klasse ten minste één abstracte methode heeft, moet de klasse abstract zijn. Het is onmogelijk voor een klasse om abstract en definitief te zijn, en ook een methode. De methode mag niet abstract, privé, statisch of native zijn. Om overgeërfde klassen als niet-abstract en geïnstantieerd te verklaren, moeten ze alle abstracte methoden van de ouder implementeren. De klasse zelf kan zijn abstracte methoden gebruiken.

Een voorbeeld:

  • abstracte klasse A klasse {
  • openbare abstracte ongeldige methode (int a);
  • }
  • klasse BClass breidt AClass {
  • public void method (int a) {
  • // body
  • }

Variabelen van het type abstract class zijn toegestaan. Ze kunnen verwijzen naar een niet-abstracte afstammeling van deze klasse of nul zijn.

Java-interfaces - een alternatief voor meervoudige overerving

java-interfaces en abstracte klassen

Er is geen meervoudige overerving in Java omdat er dan bepaalde problemen ontstaan. Een klasse kan niet erven van meerdere klassen. Maar het kan meerdere interfaces implementeren.

Java-interfaces en abstracte klassen - conceptenvergelijkbaar maar niet hetzelfde. De interface kan als openbaar worden gedeclareerd, dan is deze voor iedereen beschikbaar, of u kunt de openbare modifier weglaten, dan is de interface alleen beschikbaar in het pakket. Het abstracte trefwoord is niet vereist omdat de interface al abstract is, maar u kunt het specificeren.

Interface verklaring

verschil van abstracte klasse van java-interface

Het begint met een titel en kan als eerste gaanhet openbare trefwoord gevolgd door het interfacewoord. Dan breidt het woord zich uit en kan een opsomming komen van de interfaces waarvan de gegeven is geërfd. Herhalingen zijn hier niet toegestaan, en het is ook onmogelijk dat een erfenisrelatie een circulaire relatie vormt. Dan komt de body van de interface, omsloten door accolades. Elementen worden gedeclareerd in de body van de interface: constante velden en abstracte methoden. Alle velden zijn openbaar, definitief statisch - al deze modificatoren zijn optioneel. Alle methoden worden als openbaar abstract beschouwd - deze modificatoren kunnen ook worden gespecificeerd. Nu is er genoeg gezegd over het verschil tussen een abstracte klasse en een Java-interface.

  • openbare interface AI breidt B, C, D {uit
  • // body
  • }

Om een ​​klasse te declareren om een ​​interface te erven, gebruik je het implementaties sleutelwoord:

  • class AClass implementeert BI, CI, DI {}

Dat wil zeggen, als een interfacenaam wordt gespecificeerd na implementaties in een klassendeclaratie, dan implementeert de klasse deze. De erfgenamen van deze klasse erven de elementen, dus voeren ze deze ook uit.

Interfacevariabelen zijn ook toegestaan.Ze kunnen verwijzen naar het type klasse dat deze interface implementeert, of null. Dergelijke variabelen bevatten alle elementen van de klasse Object, omdat objecten zijn afgeleid van klassen en die op hun beurt worden overgenomen van de klasse Object.

In dit artikel hebben we gekeken naar enkele elementen van het Java-objectmodel: abstracte klassen, abstracte methoden, interfaces.