Klasse und Objekt
Es gibt viele Programmiersprachen und fast ebenso viele Programmierstile (manchmal auch Paradigmen genannt). Die Programme, die wir bisher geschrieben haben, sind hauptsächlich prozedural, da der Schwerpunkt auf der Angabe von Rechenprozeduren lag. Die meisten Java-Programme sind objektorientiert, was bedeutet, dass der Fokus auf Objekten und deren Interaktionen liegt. Hier sind einige Merkmale der objektorientierten Programmierung:
Objekte repräsentieren oft Entitäten aus der realen Welt. Die meisten Methoden sind Objektmethoden (wie die Methoden, die Sie auf String
-Objekten aufrufen) und nicht Klassenmethoden (wie die Math
-Methoden). Die Methoden, die wir bisher geschrieben haben, waren Klassenmethoden. In diesem Kapitel werden wir einige Objektmethoden schreiben.
Objekte sind voneinander isoliert, indem die Art ihrer Interaktion begrenzt wird, insbesondere indem verhindert wird, dass sie auf Instanzvariablen zugreifen, ohne Methoden aufzurufen. Klassen sind in Stammbäumen organisiert, in denen neue Klassen bestehende Klassen erweitern, neue Methoden hinzufügen und andere ersetzen.
In Java erweitert jede Klasse eine andere Klasse, außer die Klasse Object
. Die grundlegendste Klasse ist die Object
-Klasse. Sie enthält keine Instanzvariablen, aber sie bietet unter anderem die Methoden equals
und toString
.
Viele Klassen erweitern Object
, darunter fast alle Klassen, die wir geschrieben haben, und viele Java-Typen wie Integer
, Double
, String
, Arrays usw. Jede Klasse, die nicht explizit einen Elternteil angibt, erweitert standardmäßig Object
. Der "Stammbaum" der Klassen wird Klassenhierarchie genannt. Object
erscheint normalerweise ganz oben, mit allen Kindklassen darunter.
Klassen und Objekte haben normalerweise einige Attribute, die verwendet werden, um diese Klassen/Objekte zu beschreiben, und die Methoden werden verwendet, um bestimmte Funktionen auszuführen. Hier geben wir Ihnen ein Beispiel, um Ihnen zu zeigen, wie eine Klasse aussieht. Speichern Sie den Code in objectTest.java
und führen Sie ihn über die Befehlszeile aus.
Beispiel:
Schreiben Sie den folgenden Code in die Datei /home/labex/project/objectTest.java
:
// use keyword 'class' to create a new class named Person
class Person
{
/*
* there are four properties,
* name of string type, age of int type
* gender of string type, weight of float type
*/
private String name;
private int age;
private String gender;
private float weight;
// this is a constructor with no return type, the same name as the class, no parameters
public Person(){
}
//this is a constructor with two parameters
public Person(String name, int age){
// use parameters to set object's name and age
this.name = name;
this.age = age;
}
// this is a constructor with four parameters
public Person(String name, int age, String gender, float weight){
// use parameters to set object's name, age, gender and weight
this.name = name;
this.age = age;
this.gender = gender;
this.weight = weight;
}
// this is an object method
public void personInfo(){
System.out.println("Name: " + this.name + "\nAge: "+ this.age + "\nGender: " + this.gender + "\nWeight: "+this.weight);
}
}
public class objectTest{
public static void main(String[] args){
// use 'new' to create an instance of class Person
Person p = new Person("aaa",18,"male",50.5f); // p refers to an object
/* you can try these two different construction methods, and see what the output is.
* Person p = new Person();
* Person p = new Person("aaa",18);
*/
// use object to invoke method personInfo()
p.personInfo();
}
}
Ausgabe:
Führen Sie die Datei objectTest.java
mit den folgenden Befehlen aus:
javac /home/labex/project/objectTest.java
java objectTest
Sehen Sie sich die Ausgabe an:
Name: aaa
Age: 18
Gender: male
Weight: 50.5
Die Person
-Klasse hat vier Attribute. Alle Attribute sind privat, sodass sie von außen nicht zugänglich sind (können nur innerhalb der Klasse verwendet werden). Es gibt eine Objektmethode namens personInfo
, die verwendet wird, um personenbezogene Informationen auszugeben, und es gibt drei Konstruktoren mit demselben Namen wie die Klassenname Person
. Der einzige Unterschied zwischen ihnen sind ihre Parameter. Dieses Verhalten wird Überladung (overloading) genannt.