Java-Klassen und -Objekte

1. Übersicht

In diesem kurzen Tutorial werden zwei grundlegende Bausteine ​​der Java-Programmiersprache betrachtet - Klassen und Objekte. Dies sind grundlegende Konzepte der objektorientierten Programmierung (OOP), mit denen wir reale Entitäten modellieren.

In OOP sind Klassen Blaupausen oder Vorlagen für Objekte. Wir verwenden sie, um Arten von Entitäten zu beschreiben.

Andererseits sind Objekte Lebewesen, die aus Klassen erstellt wurden. Sie enthalten bestimmte Zustände in ihren Feldern und präsentieren mit ihren Methoden bestimmte Verhaltensweisen.

2. Klassen

Einfach ausgedrückt repräsentiert eine Klasse eine Definition oder einen Objekttyp. In Java können Klassen Felder, Konstruktoren und Methoden enthalten.

Sehen wir uns ein Beispiel mit einer einfachen Java-Klasse an, die ein Auto darstellt :

class Car { // fields String type; String model; String color; int speed; // constructor Car(String type, String model, String color) { this.type = type; this.model = model; this.color = color; } // methods int increaseSpeed(int increment) { this.speed = this.speed + increment; return this.speed; } // ... } 

Diese Java-Klasse repräsentiert ein Auto im Allgemeinen. Wir können jede Art von Auto aus dieser Klasse erstellen. Wir verwenden Felder, um den Status zu speichern, und einen Konstruktor, um Objekte aus dieser Klasse zu erstellen.

Jede Java-Klasse hat standardmäßig einen leeren Konstruktor. Wir verwenden es, wenn wir keine spezifische Implementierung wie oben bereitstellen. So würde der Standardkonstruktor für unsere Fahrzeugklasse aussehen :

Car(){} 

Dieser Konstruktor initialisiert einfach alle Felder des Objekts mit ihren Standardwerten. Zeichenfolgen werden auf Null und Ganzzahlen auf Null initialisiert .

Unsere Klasse hat jetzt einen bestimmten Konstruktor, da wir möchten, dass unsere Felder ihre Felder definieren, wenn wir sie erstellen:

Car(String type, String model) { // ... } 

Zusammenfassend haben wir eine Klasse geschrieben, die ein Auto definiert. Seine Eigenschaften werden durch Felder beschrieben, die den Status von Objekten der Klasse enthalten, und sein Verhalten wird mithilfe von Methoden beschrieben.

3. Objekte

Während Klassen während der Kompilierungszeit übersetzt werden, werden Objekte zur Laufzeit aus Klassen erstellt .

Objekte einer Klasse werden als Instanzen bezeichnet, und wir erstellen und initialisieren sie mit Konstruktoren:

Car focus = new Car("Ford", "Focus", "red"); Car auris = new Car("Toyota", "Auris", "blue"); Car golf = new Car("Volkswagen", "Golf", "green"); 

Jetzt haben wir verschiedene Autoobjekte aus einer einzigen Klasse erstellt. Dies ist der Sinn des Ganzen, die Blaupause an einem Ort zu definieren und sie dann an vielen Orten mehrmals wiederzuverwenden.

Bisher haben wir drei Autoobjekte , die alle geparkt sind, da ihre Geschwindigkeit Null ist. Wir können dies ändern , indem Sie unseren Aufruf increaseSpeed Methode:

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

Jetzt haben wir den Zustand unserer Autos geändert - sie bewegen sich alle mit unterschiedlichen Geschwindigkeiten.

Darüber hinaus können und sollten wir die Zugriffssteuerung für unsere Klasse, ihre Konstruktoren, Felder und Methoden definieren. Wir können dies tun, indem wir Zugriffsmodifikatoren verwenden, wie wir im nächsten Abschnitt sehen werden.

4. Zugriff auf Modifikatoren

In den vorherigen Beispielen haben wir Zugriffsmodifikatoren weggelassen, um den Code zu vereinfachen. Auf diese Weise haben wir tatsächlich einen standardmäßigen paketprivaten Modifikator verwendet. Dieser Modifikator ermöglicht den Zugriff auf die Klasse von jeder anderen Klasse im selben Paket.

Normalerweise verwenden wir einen öffentlichen Modifikator für Konstruktoren, um den Zugriff von allen anderen Objekten aus zu ermöglichen:

public Car(String type, String model, String color) { // ... } 

Jedes Feld und jede Methode in unserer Klasse sollte auch die Zugriffssteuerung durch einen bestimmten Modifikator definiert haben. Klassen haben normalerweise öffentliche Modifikatoren, aber wir neigen dazu, unsere Felder privat zu halten .

Felder enthalten den Status unseres Objekts, daher möchten wir den Zugriff auf diesen Status steuern. Wir können einige von ihnen privat und andere öffentlich halten . Dies erreichen wir mit spezifischen Methoden, die als Getter und Setter bezeichnet werden.

Werfen wir einen Blick auf unsere Klasse mit vollständig spezifizierter Zugriffskontrolle:

public class Car { private String type; // ... public Car(String type, String model, String color) { // ... } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public int getSpeed() { return speed; } // ... } 

Unsere Klasse ist als öffentlich gekennzeichnet , was bedeutet, dass wir sie in jedem Paket verwenden können. Außerdem ist der Konstruktor öffentlich , was bedeutet, dass wir aus dieser Klasse in jedem anderen Objekt ein Objekt erstellen können.

Unsere Felder sind als privat gekennzeichnet , was bedeutet, dass sie nicht direkt von unserem Objekt aus zugänglich sind. Wir bieten jedoch Zugriff über Getter und Setter.

Die Art und Modellfelder haben keine Getter und Setter, weil sie interne Daten unserer Objekte halten. Wir können sie nur über den Konstruktor während der Initialisierung definieren.

Darüber hinaus kann auf die Farbe zugegriffen und diese geändert werden, während auf die Geschwindigkeit nur zugegriffen werden kann, jedoch nicht. Wir haben Geschwindigkeitsanpassungen durch spezielle öffentliche Methoden zur Erhöhung der Geschwindigkeit () und zur Verringerung der Geschwindigkeit () erzwungen .

Mit anderen Worten, wir verwenden die Zugriffssteuerung, um den Status des Objekts zu kapseln.

5. Schlussfolgerung

In diesem Artikel haben wir zwei grundlegende Elemente der Java-Sprache, Klassen und Objekte, durchgesehen und gezeigt, wie und warum sie verwendet werden. Wir haben auch die Grundlagen der Zugangskontrolle eingeführt und deren Verwendung demonstriert.

Um andere Konzepte der Java-Sprache zu erlernen, empfehlen wir, als nächsten Schritt Informationen zur Vererbung, zum Super-Schlüsselwort und zu abstrakten Klassen zu lesen.

Der vollständige Quellcode für das Beispiel ist auf GitHub verfügbar.