Java-klasser og objekter

1. Oversigt

I denne hurtige vejledning ser vi på to grundlæggende byggesten i Java-programmeringssproget - klasser og objekter. De er grundlæggende begreber i Object Oriented Programming (OOP), som vi bruger til at modellere virkelige enheder.

I OOP, klasser er tegninger eller skabeloner til objekter. Vi bruger dem til at beskrive typer enheder.

På den anden side, objekter er levende enheder, skabt af klasser. De indeholder visse tilstande inden for deres felter og præsenterer visse opførsler med deres metoder.

2. Klasser

Kort sagt repræsenterer en klasse en definition eller en type objekt. I Java kan klasser indeholde felter, konstruktører og metoder.

Lad os se et eksempel ved hjælp af en simpel Java-klasse, der repræsenterer en Bil:

klasse Bil {// felter Strengtype; Strengmodel; Strengfarve; int hastighed; // konstruktørbil (streng type, streng model, streng farve) {this.type = type; this.model = model; denne. farve = farve; } // metoder int increaseSpeed ​​(int-inkrement) {this.speed = this.speed + inkrement; returner dette. hastighed; } // ...} 

Denne Java-klasse repræsenterer en bil generelt. Vi kan oprette alle typer biler fra denne klasse. Vi bruger felter til at holde staten og en konstruktør til at oprette objekter fra denne klasse.

Hver Java-klasse har som standard en tom konstruktør. Vi bruger det, hvis vi ikke leverer en specifik implementering, som vi gjorde ovenfor. Sådan ser standardkonstruktøren efter vores Bil klasse:

Bil(){} 

Denne konstruktør initialiserer simpelthen alle felter i objektet med deres standardværdier. Strenge initialiseres til nul og heltal til nul.

Nu har vores klasse en bestemt konstruktør, fordi vi ønsker, at vores objekter skal have deres felter defineret, når vi opretter dem:

Bil (strengtype, strengmodel) {// ...} 

For at opsummere skrev vi en klasse, der definerer en bil. Dens egenskaber er beskrevet af felter, der indeholder tilstanden af ​​objekter i klassen, og dens adfærd er beskrevet ved hjælp af metoder.

3. Objekter

Mens klasser oversættes i løbet af kompileringstiden, objekter oprettes fra klasser ved kørsel.

Objekter fra en klasse kaldes forekomster, og vi opretter og initialiserer dem med konstruktører:

Bilfokus = ny bil ("Ford", "Focus", "rød"); Car auris = ny bil ("Toyota", "Auris", "blå"); Bilgolf = ny bil ("Volkswagen", "Golf", "grøn"); 

Nu har vi skabt forskellige Bil objekter, alle fra en enkelt klasse. Dette er pointen med det hele, at definere tegningen på ét sted og derefter at genbruge den mange gange mange steder.

Indtil videre har vi tre Bil genstande, og de er alle parkeret, da deres hastighed er nul. Vi kan ændre dette ved at påberåbe os øge hastighed metode:

focus.increaseSpeed ​​(10); auris.increaseSpeed ​​(20); golf.increaseSpeed ​​(30); 

Nu har vi ændret vores bilers tilstand - de bevæger sig alle med forskellige hastigheder.

Desuden kan og bør vi definere adgangskontrol til vores klasse, dens konstruktører, felter og metoder. Vi kan gøre det ved at bruge adgangsmodifikatorer, som vi vil se i næste afsnit.

4. Adgangsmodifikatorer

I de foregående eksempler har vi udeladt adgangsmodifikatorer for at forenkle koden. Ved at gøre dette brugte vi faktisk en standardpakke-privat modifikator. Denne modifikator giver adgang til klassen fra enhver anden klasse i samme pakke.

Normalt bruger vi en offentlig modifikator til konstruktører, der giver adgang fra alle andre objekter:

offentlig bil (streng type, streng model, streng farve) {// ...} 

Hvert felt og metode i vores klasse burde også have defineret adgangskontrol af en bestemt modifikator. Klasser har normalt offentlig modifikatorer, men vi har tendens til at beholde vores marker privat.

Felter holder tilstanden for vores objekt, derfor vil vi kontrollere adgangen til denne tilstand. Vi kan beholde nogle af dem privat, og andre offentlig. Vi opnår dette med specifikke metoder kaldet getters og setters.

Lad os se på vores klasse med fuldt specificeret adgangskontrol:

offentlig klasse bil {privat streng type; // ... public Car (String type, String model, String color) {// ...} public String getColor () {return color; } public void setColor (String color) {this.color = color; } offentlig int getSpeed ​​() {returhastighed; } // ...} 

Vores klasse er markeret offentlig, hvilket betyder, at vi kan bruge det i enhver pakke. Også konstruktøren er offentlig, hvilket betyder, at vi kan oprette et objekt fra denne klasse inde i ethvert andet objekt.

Vores felter er markeret privat, hvilket betyder, at de ikke er direkte tilgængelige fra vores objekt, men vi giver adgang til dem gennem getters og setters.

Det type og model felter har ikke getters og settere, fordi de indeholder interne data om vores objekter. Vi kan kun definere dem gennem konstruktøren under initialiseringen.

Desuden er den farve kan tilgås og ændres, mens fart kan kun fås, men ikke ændres. Vi håndhævede hastighedsjusteringer gennem specialiserede offentlig metoder increaseSpeed ​​() og faldSpeed ​​().

Med andre ord, vi bruger adgangskontrol til at indkapsle objektet.

5. Konklusion

I denne artikel gennemgik vi to grundlæggende elementer i Java-sproget, klasser og objekter og viste, hvordan og hvorfor de bruges. Vi introducerede også det grundlæggende i adgangskontrol og demonstrerede dets anvendelse.

For at lære andre begreber i Java-sprog foreslår vi at læse om arv, super-nøgleordet og abstrakte klasser som et næste trin.

Den komplette kildekode til eksemplet er tilgængelig på GitHub.