Show Menu
Cheatography

Java für Beginner > #03 OOP Cheat Sheet (DRAFT) by [deleted]

3. Teil der "Java for Beginners"-CheatSheet Reihe. Erklärungs-Reihenfolge/Art ist Teils von **SoloLearn**!

This is a draft cheat sheet. It is a work in progress and is not finished yet.

Einleitung

Java hat einen ziemlich "­OOP­-La­sti­gen­" Progra­mmier Styl. (Objekt Orient­ierte Progra­mmi­erung). Das heißt das man Objekte so sehen soll wie man es in der Echten Welt täte.

In der OOP hat jedes Objekt seine eigene Identität. Ein Apfel ist Ein Objekt, so auch eine Tasse. Auch 2 Äpfel welche gleich aussehen, sind im eigent­lichen 2 Seperate Äpfel mit deren eigenen Eigens­chaften und Verhalten

Klassen beschr­eiben wie ein Objekt sein wird / was es haben wird.
In anderen Worten können Klassen wie BluePrints angesehen werden.
Man kann die selbe Klasse als BluePrint für unendlich Objekte benutzen.

Jede Klasse hat einen Namen, Variablen (Attri­bute) und Methoden (Verha­lten). Hier ist ein Beispi­els­-Bild:
https:­//a­pi.s­ol­ole­arn.co­m/D­own­loa­dFi­le?­id=2429

Funktionen & Variablen

Methoden (Auch Funkti­one­n/V­erh­alten gennant) sind Annsam­mlungen von Statements um eine Operation durchz­ufü­hren. Wie zB. auch die Methode println(x) in System.out.

Funktionen die ein static-Keyword besitzen können auch nur mit Hilfe der Klasse (BlueP­rints) aufgerufen werden, aber dann haben diese Methoden auch nur die static-Varia­ble­n/F­unk­tionen der Klasse zu Verfügung.

class MyClass {
 
 ­public int var = 2;
 
 void hallo(){ System.ou­t.p­rin­tln­("Ha­llo­"); }
 int addier­en(int x1, int x2){ return x1 + x2; }
 
 ­static void test(){
 ­ ­thi­s.var= 2;// >Fe­hler: Die Variable "­var­" kann nur eine erstellte Instanz besitzen.
 }
 
}


Variablen
Eine Klasse kann "2 Typen von Variab­len­" haben:
- Variable mit static-Keyword, welche für das gesamte BluePrint gilt
- Normale Variable, welche für jedes Objekt anders ist.

Im oberen Fall ist die Variable var eine Objekt­-Va­riable.
Siehe Konstr­uktor um zu sehen wie man ein neues Objekt erstellt.
Siehe Getter & Setter für extrigen "­Var­iab­len­-Sc­hut­z".

Zugriff Modifi­zierer

public
Für Jeden Zugreifbar
private
Nur für die Klasse
protected
Nur für die Klasse und Sub-Kl­assen
static
Keyword, damit man eine Method­e/V­ariable auch nur durch die Klasse/das BluePrint bekommen kann
final
Keyword, dass eine Variable nicht veränd­erbar ist
 

Konstr­uktor

Eine Klasse kann außer Funktionen und Methoden noch mehrere Konstr­uktöre haben.
Ein Konstr­uktor ist aufgebaut wie eine Methode, aber nur ist er dafür ein neues Objekt seines Klasse­n-B­lue­Prints zu erstellen.

Ein Konstr­uktor sieht wie folgt aus: (Syntax)
public Klasse­nName(...){ Code }

Ein Beispiel für die Klasse MyClass, welche eine Variable var hat. (aus "­Getters und Setter­s"):
public MyClas­s(int wert) { // Beim erstellen dieser Klasse muss ein Wert übergeben werden
 ­thi­s.var = wert; // Setzt die Klasse­n-V­ariable "­val­" auf den mitgel­ief­erten Wert
}

Und nun kann man mit:
MyClass instanz1 = new MyClas­s(224);
Eine neue Instan­z/O­bjekt der Klasse MyClass erstellen.

Getter & Setter

Getter & Setter ist ein Konzept in der Progra­mmi­erung, wo dafür gedacht ist dass man das Setzen einer Variable überprüfen kann, um Fehler zu vermeiden.
Dies macht man, indem man die eigent­liche Variable auf private setzt, und eine Methode zum "­Set­zte­n" sowie eine zum "­Kri­ege­n" erstellt.

Ein klassi­sches Beispiel wäre es, dass man einen int macht, der nur im Positiven bereich gesetzt werden darf:
class MyClass {
 
 ­private int var = 2;
 
 void setVar(int wert){
 ­ ­if(wert < 0) { wert = 0; } // Angege­benen Wert vor dem setzten überprüfen und ändern
 ­  this.var = wert;
 }
 
 int getVar(){ return this.var; }
 
}
Hiermit kann ich mir ziemlich sicher sein, dass mir .getVar() immer eine positive Zahl gibt.

In jedem Java Programm wird diese Progra­mmi­erweise bevorzugt, was auch gut ist und man sich auch angewöhnen sollte.
Kurz gesagt sind Getter und Setter eine "­Idi­ote­n-S­chu­tz", damit Variablen keinen nicht vorher­gesehen Wert erhalten!

Wert VS Referenz

Wenn man einer Methode einen Primit­ive­n-D­ate­ntypen übergibt, kann man sich sicher sein dass er nicht verändert wird.
Übergibt man jedoch eine Klasse, können die Variablen des Objektes verändert werden.

Bsp:

void doSome­thi­ng(int num) { num = 22; }
int num = 5;
doSome­thi­ng(­num);
System.ou­t.p­rin­tln­(num); // Immernoch 5 hier

Aber mit einer Klasse:
class MyClass { int num = 4; }
void doSome­thi­ng(­MyClass obj) { obj.num = 22; }
MyClass obj = new MyClass();
doSome­thi­ng(­obj);
System.ou­t.p­rin­tln­(ob­j.num); // 22
 

Vererbung

Vererben einer Klasse­/In­ter­faces heißt, dass die Klasse alle Method­en/­Var­iablen hat, von welchem sie erbt.

Dies sieht dann so aus:

Mutter­-Kl­asse:
class A {
 
 ­public int variable = 2;
 
 ­public void test(){ System.ou­t.p­rin­tln­("Hallo A") }
 
}

Klasse welche von A erbt:
class B extends A {
 
 ­@Ov­erride // Methode von A übersc­hreiben
 ­public void test(){ System.ou­t.p­rin­tln­("Hallo B"); }
 
}

Code Beispiel
A obj = new A();
obj.te­st(); // GIbt "­Hallo A" aus
obj = new B(); // Wir können die Variable "­obj­" auf ein Objekt vom Typ "­B" setzten, weil B von A erbt
obj.te­st(); // Gibt "­Hallo B" aus
obj.va­riable = 4; // Und weil "­obj­" immernoch vom Typ "­A" ist, hat es auch immer noch seine Variablen

Zudem kann die Klasse, welche erbt, die Methoden auf ein anderes Verhalten umschr­eiben. (Den Code der Methode umschr­eiben)