142 lines
3.0 KiB
Markdown
142 lines
3.0 KiB
Markdown
|
# Klassen
|
||
|
|
||
|
### Definition einer Klasse
|
||
|
|
||
|
|
||
|
Klassen in Groovy werden ähnlich wie in Java definiert, jedoch mit einigen
|
||
|
syntaktischen Erleichterungen: mit dem class-Schlüsselwort, ohne Semikolon
|
||
|
|
||
|
Beispiel
|
||
|
```Groovy
|
||
|
class Person {
|
||
|
String name
|
||
|
int age
|
||
|
}
|
||
|
```
|
||
|
|
||
|
|
||
|
### Konstruktoren
|
||
|
|
||
|
Groovy fügt automatisch einen Standardkonstruktor (="Default-Konstruktor") hinzu, wenn
|
||
|
keine Konstruktoren explizit definiert sind. Dieser Standardkonstruktor initialisiert alle
|
||
|
Eigenschaften der Klasse mit ihren Standardwerten.
|
||
|
Man kann auch benutzerdefinierte Konstruktoren definieren oder die beiden Konstruktorarten
|
||
|
auch gleichzeitig nutzen. Man spricht dabei von Konstruktorüberladung (auch wie in Java,
|
||
|
C++, C#...)
|
||
|
|
||
|
```Groovy
|
||
|
class Person {
|
||
|
String name
|
||
|
int age
|
||
|
|
||
|
//Default-Konstruktor
|
||
|
def person = new Person()
|
||
|
|
||
|
//benutzerdefinierter Konstruktor
|
||
|
Person(String name, int age) {
|
||
|
this.name = name
|
||
|
this.age = age
|
||
|
}
|
||
|
}
|
||
|
```
|
||
|
|
||
|
```Groovy
|
||
|
class Person {
|
||
|
String name
|
||
|
int age
|
||
|
|
||
|
Person() {
|
||
|
// Standardkonstruktor
|
||
|
}
|
||
|
|
||
|
Person(String name, int age) {
|
||
|
this.name = name
|
||
|
this.age = age
|
||
|
}
|
||
|
}
|
||
|
|
||
|
def person1 = new Person()
|
||
|
println(person1.name) // Ausgabe: null
|
||
|
println(person1.age) // Ausgabe: 0
|
||
|
|
||
|
def person2 = new Person("Alice", 30)
|
||
|
println(person2.name) // Ausgabe: Alice
|
||
|
println(person2.age) // Ausgabe: 30
|
||
|
```
|
||
|
|
||
|
|
||
|
### Standardkonstruktor mit Map
|
||
|
|
||
|
Groovy bietet eine spezielle Initialisierungsform mit einer Map an. Dieser Konstruktor
|
||
|
ermöglicht Objekte einfach und übersichtlich zu initialisieren, indem die Eigenschaften
|
||
|
des Objekts direkt in Form von Schlüssel-Wert-Paaren in der Map angegeben werden.
|
||
|
Groovy kümmert sich dann um die Zuordnung der Werte zu den entsprechenden Feldern der Klasse.
|
||
|
Der Map-Konstruktor muss nicht explizit definiert werden (hier nur als Beispiel), da es ein eingebautes Standard-Feature von Groovy ist.
|
||
|
```Groovy
|
||
|
class Person {
|
||
|
String name
|
||
|
int age
|
||
|
|
||
|
// Map-Konstruktor
|
||
|
Person(Map properties) {
|
||
|
properties.each { key, value -> this."$key" = value }
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Person person = new Person(name: 'John', age: 30)
|
||
|
println(person.name) // Ausgabe: John
|
||
|
println(person.age) // Ausgabe: 30
|
||
|
```
|
||
|
|
||
|
|
||
|
### Eigenschaften
|
||
|
|
||
|
Eigenschaften können direkt als Felder definiert werden. Groovy
|
||
|
generiert automatisch Getter- und Setter-Methoden (wie in Ruby)
|
||
|
|
||
|
Beispiel
|
||
|
```Groovy
|
||
|
Person person = new Person()
|
||
|
person.name = "John"
|
||
|
person.age = 30
|
||
|
println person.name
|
||
|
//John
|
||
|
```
|
||
|
|
||
|
|
||
|
Getter und Setter können aber auch manuell überschrieben werden
|
||
|
|
||
|
Beispiel
|
||
|
|
||
|
```Groovy
|
||
|
class Fruits {
|
||
|
private String fruitName
|
||
|
private String fruitColor
|
||
|
|
||
|
def setFruitName(String name) {
|
||
|
fruitName = name
|
||
|
}
|
||
|
|
||
|
def getFruitName() {
|
||
|
return "The fruitname is $fruitName"
|
||
|
}
|
||
|
|
||
|
def setFruitColor(String color) {
|
||
|
fruitColor = color
|
||
|
}
|
||
|
|
||
|
def getFruitColor(){
|
||
|
return "The color is $fruitColor"
|
||
|
}
|
||
|
|
||
|
static void(args) {
|
||
|
//Instanz erstellen
|
||
|
Fruits apple = new Fruits()
|
||
|
apple.setFruitName("apple")
|
||
|
apple.setFruitColor("red")
|
||
|
}
|
||
|
}
|
||
|
```
|
||
|
|
||
|
|
||
|
|