Apps für Android programmieren leicht gemacht!
2.5 Methoden und Klassen

2.5 Methoden und Klassen

In diesem Artikel wollen wir euch gerne zeigen, wie ihr Methoden oder auch Funktionen genannt benutzt und was Klassen sind. Am Ende wollen wir dann Klassen und Methoden in Verbindung setzten und im Zusammenspiel mit einander beispielhaft verwenden.
Da Methoden und Klassen ein Grundelement der Programmierung in Java sind wird dieses Kapitel entsprechend länger. Bitte seit darauf vorbereitet und versucht eine Pause einzulegen, wenn euch der Schädel brummt.


 

public und private:

Dies sind zwei wichtige Begriffe in der Programmierung mit Java und diese werden euch sehr häufig wieder über den Weg laufen. Mit Hilfe dieser Angaben kannst du definieren, ob andere Klassen auf eine bestimmte Klasse und/oder Funktionen zugreifen können oder nicht.
Wir greifen hier ein wenig vor, aber das ist sehr wichtig.

Sagen wir mal ich bin eine Klasse und ich  kann super gut rechnen, habe diese Methode von mir allerdings als private deklariert. Weil ich rechnen von mit als private deklariert habe, habe ich sozusagen niemandem gesagt, dass ich gut rechnen kann. Weil nun allerdings keiner weiß dass ich gut rechnen kann, können andere Personen (Klassen) mich nicht ihre Matheaufgaben rechnen lassen. Nur ich selber kann für mich rechnen, aber nicht für andere die mich darum bitten.
Hätte ich rechnen als public deklariert, also gesagt ich könnte gut Mathe, wäre ich gezwungen die Matheaufgaben für sie zu rechnen.

Vielleicht wird dieses Prinzip später noch ersichtlicher.


 

Methoden/Funktionen:

Methoden oder auch Funktionen genannt sind Codeabschnitte, die dynamisch oft und an beliebigen Stellen eines Programmcodes verwendet werden können. Methoden/Funktionen können mit einem kleinen Befehl aufgerufen werden, selber allerdings lange Operationen ausführen, Berechnungen durchführen oder ähnliches erledigen. Alle Methoden sind nach einem einfachen Schema aufgebaut und sind sehr schnell zu erlernen.

Sobald wir eine Methode schreiben wollen, um sie später wieder verwenden zu können müssen wir als erstes schreiben, ob diese Methode „public“ oder „private“ ist. Damit beschreiben wir, ob andere Klassen später auf diese Methode zugreifen dürfen/können. Wir machen sie nun einmal public:

public

 

Anschließend müssen wir definieren, ob die Methode die wir gerade schreiben etwas zurück gibt und wenn ja was.
Gibt die Methode etwas zurück, wie zum Beispiel eine Zahl schreiben wir hinter das „public“ nun ein „int“. Gibt sie einen Text zurück schreiben wir ein „String“ statt des „int“ und gibt sie eine Klasse als Objekt zurück schreiben wir den Namen der Klasse. (später erklärt) Gibt die Methode nichts zurück schreiben wir anstelle des Rückgabetypes ein „void“.
Wir wollen in unserem Beispiel nun einmal sagen, die Funktion gibt eine Zahl zurück, dann sieht der Anfang wie folgt aus:

public int

 

Anschließend geben wir der Methode noch einen Namen. Wir geben ihr den Namen „Muliplizieren“.

public int Mulitplizieren

 

Nach dem Namen kommt nun eine Klammer „()“.

public int Multiplizieren()

 

Wollen wir etwas an die Methode übergeben, womit diese später arbeiten soll/kann dann schreiben wir nun den Datentyp und den Namen der übergebenen Variable in die Klammer. Mehrere übergebene Variablen werden mit einem Komma getrennt geschrieben.

public int Mulitplizieren(int a, int b)

 

Nun haben wir bereits fast eine vollwertige Methode geschrieben, die uns eine Zahl zurück gibt und zwei Zahlen (a und b) übergeben bekommt. Im nächsten Schritt müssen wir noch den Bereich der Methode beschreiben, die machen wir durch ein { und ein }. Alle Methoden und Befehle innerhalb der angehängten geschweiften Klammer wird dann beim Aufruf von „Multiplizieren“ ausgeführt.
Nun werden wir in einem Schritt diese Klammern setzten und direkt eine Zahl „c“ berechnen, die aus „a“ mal „b“ besteht. Und geben auch gleich die Zahl c mit dem Befehl „return“ zurück.

public int Mulitplizieren(int a, int b){

   int c = a * b;


   return c;
}

Wichtig: Definiert man eine Methode, die etwas zurückgibt, muss man diese mit einem return-Befehl abschließen und einen Datentyp zurückgeben, der am Anfang nach dem public oder private, definiert wurde.

Aufgerufen wird die Methode jetzt folgendermaßen:

//die variable "produkt" wird die Zahl 6 enthalten, weil Mulitplizieren(2, 3) die Zahlen 2 und 3 multipliziert.
int produkt = Multiplizieren(2, 3);

 

Klassen:

Klassen sind ähnlich wie die Methoden aufgebaut, unterscheiden sich allerdings sonst grundlegend von Methoden.
Klassen können Methoden enthalten, Methoden allerdings keine Klassen.
Klassen können als Objekte in Variablen geschrieben werden, Methoden nicht.
Um es einmal anders zu Beschreiben:
Klassen sind wie Lego-Baupläne.
Klassen in Variablen sind Objekte und damit der Kran, der aus dem Lego-Bauplan gebaut wurde.
Methoden innerhalb von Objekten/Klassen sind wie der Haken des Kranes, der angesprochen werden kann und arbeit verrichtet.
Das ist vielleicht ein doofes Beispiel, aber ich versuche es später klarer werden zu lassen.

Erstellen wir vorerst eine eigene Klasse. Dabei fangen wir mit „public“ an und schreiben dann die Definition „class“:

public class

 

Anschließend geben wir der Klasse einen Namen, damit wir sie später wiederfinden können.

public class TestKlasse

 

Nun müssen wir nur noch den Bereich der Klasse definieren:

public class TestKlasse {
   //Inhalt der Klasse
}

 

Abschließend schreiben wir noch einen Kostruktor. Dieser Konstrukter wird automatisch und eigenständig aufgerufen und ausgeführt, wenn wir die Klasse „TestKlasse“ in einer anderen Klasse initialisieren.
Rufen wir also TestKlasse zum ersten mal auf, wird auch der Konstruktor automatisch mit ausgeführt. Dies ist beispielsweise sehr hilfreich, wenn wir ein neues Objekt aus einer Klasse erstellen und der Konstruktor setzt dabei automatisch alle Variablen auf 0 oder ähnliches.

//Klasse initalisieren
public class TestKlasse {
   //Inhalt der Klasse

   //dies ist der Konstruktor. Er besitzt den gleichen Namen wie die Klasse und gibt nichts zurück.
   public void TestKlasse(){
      //Hier werden im Konstruktor vielleicht Variablen initialisiert oder auf 0 gesetzt.
   }

}

Wichtig: Der Konstruktor besitzt bei Android den gleichen Namen, wie die Klasse selber und ist public.


 

Methoden und Klassen im Zusammenspiel:

Hier greifen wir nun das anfänglich beschriebene Prinzip von public und private wieder auf.
Wir können nun innerhalb einer Klasse eine ganz andere Klasse initialisieren und sie als Objekt in eine Variable schreiben. Diese Vorgehensweise hat den Vorteil, dass wir eine Klasse schreiben und sie und ihre Methoden in einer anderen Klasse weiter verwenden können.
Nehmen wir als Beispiel mal die Klasse Test und die Klasse TestObjekt.

public class Test{

}

public class TestObjekt{
   public int Mulitplizieren(int a, int b){
      int c = a * b;
      return c;
   }

   private int Addieren(int a, int b){
      int c = a + b;
      return c;
   }
}

Die Klasse TestObjekt hat die Methoden Multiplizieren und Addieren, beide geben eine Zahl zurück und führen etwas für jemanden aus. Nun möchten wir diese beiden Methoden gerne in der Klasse Test verwenden, dazu erstellen wir ein neues Objekt in der Klasse Test, dass die Klasse TestObjekt enthält.

public class Test{

   public void Test(){
      TestObjekt TO = new TestObjekt();
   }

}

public class TestObjekt{

   public int Mulitplizieren(int a, int b){
      int c = a * b;
      return c;
   }

   private int Addieren(int a, int b){
      int c = a + b;
      return c;
   }

}

Nun haben wir ein Objekt des Types TestObjekt erstellt und es den Namen „TO“ gegeben. Mit diesem Ojekt können wir nun alle Methoden verwenden, die die Klasse TestObjekt als public zur Verfügung stellt.

public class Test{

   public void Test(){
      TestObjekt TO = new TestObjekt();

      TO.Multiplizieren(2, 3); //dies wäre möglich, weil TestObjekt die Methode Multiplizieren öffentlich (public) besitzt.

      TO.Addieren(2, 3); //dies wäre NICHT möglich, weil TestObjekt die Methode Addieren privat (private) besitzt.
   }

}

public class TestObjekt{

   public int Mulitplizieren(int a, int b){
      int c = a * b;
      return c;
   }

   private int Addieren(int a, int b){
      int c = a + b;
      return c;
   }

}

Marvin

Ich bin 23 Jahre jung und studiere zurzeit Wirtschaftsinformatik an der Georg-August-Universität in Göttingen. Ich bin ein Mensch, der sich neben der Programmierung noch für tausend andere Dinge interessiert, die mal mehr und mal weniger verrückt sind. Vor allem aber bin ich Feuer und Flamme mit der Programmierung von eigenen kleinen Apps und Programmen, die mein Leben bereichern.

3 Kommentare

*Pflichtfeld

  • Hallo,
    ich weiß nicht ob ich überhaupt eine Antwort erhalten werde, aber ich versuche es einfach mal. (ich glaube die seite ist vielleicht nicht mehr aktuell, da ich mich auch nicht registrieren konnte)

    Es geht mir zb. um den letzten Code ausschnitt auf dieser Seite.

    1.)Können wir die zeilen 4. bis 8. nicht auch direkt in die Klasse schreiben? ich verstehe den sinn eines Konstruktors nicht wirklich um ehrlich zu sein.

    2.) Ist es möglich in der Klasse ein Objekt des Typs TestObjekt erstellen, wenn es doch erst später im Programm geschrieben wird?

    3.) Besitzt „TO“ ab der zeile 4. den wert „6“ ? Und wäre addieren public, würde dieser wert dann in der Zeile 8. mit dem Wert „5“ überschrieben?

    Es wäre SUUUPPPEEERRRRR nett wenn ich eine antwort bekommen würde :)))

    • Hallo Orhan,

      momentan habe ich leider wenig Zeit, um die Seite zu pflegen (Arbeit + Uni + Familie).
      Vielen Dank für den Hinweis mit der Registrierung. Der Fehler ist behoben.

      1) Ja, das ist sicherlich möglich.
      Die Idee hinter diesem kleinen Beispielcode war, dass ich auf einfache Weise zeige, dass man in einer beliebigen Klasse (hier Test) ein Objekt von einer anderen Klasse (hier TestObjekt) erstellen und dessen Funktionen in der ersten Klasse benutzen kann.
      Sicher, die Methoden direkt aufzurufen wäre hier sinnvoller, aber es ging lediglich um ein Beispiel.
      Der Sinn des Konstruktors ist hier einfach, dass wir in einer Klasse (nennen wir sie mal „Hauptklasse“) ein Objekt der Klasse „Test“ erstellen können und dabei automatisch der Konstruktor der Klasse „Test“ aufgerufen wird. Dieser Konstruktor erstellt seinerseits wiederum ein Objekt, aber dieses mal der Klasse „TestObjekt“ und ruft dessen Methoden auf.

      2) Leider verstehe ich die Frage nicht ganz.
      Die Klasse „TestObjekt“ muss einmal fertig programmiert sein und beim Kompilieren der App zur Verfügung stehen. Wo sich diese Klasse befindet ist dabei egal. Es ist völlig irrelevant, ob die Klasse „TestObjekt“ in der selben Datei steht (weit oben oder weit unten) oder ob die Klasse in einer eigenen Datei steht (Bsp. „TestObjekt.java“).
      Wichtig ist nur, dass die Klasse zur Erstellung der App fertig programmiert ist und das Objekt (hier „TO“) erstellt wurde, bevor die Methoden des Objektes/der Klasse aufgerufen werden.

      3) Nein, ob nun public oder private ist hier egal. Überschrieben wird nur, wenn 2 Funktionen den selben Namen haben. „TO“ besitzt in der Zeile 4 nicht den Wert „6“, da es sich erst einmal bei „TO“ nur um das Objekt der Klasse „TestObjekt“ handelt. Die Methode „multiplizieren“ der Objektes „TO“ gibt allerdings den „6“ zurück. Hier musst du Unterschiede ziehen.

      Ich hoffe die Erklärung ist so einigermaßen verständlich.

      Gruß,
      Marvin