Erste Schritte Generelle Fragen zu Java / Greenfoot.

  • Themenstarter Themenstarter Brauche Hilfe
  • Beginndatum Beginndatum
B

Brauche Hilfe

Gast
Hallo Community,

in der Schule haben wir vor einer Woche mit Greenfoot angefangen zu programmieren. Außerdem hat unser Lehrer uns einige Internetadressen ausgegeben mit denen wir arbeiten können.


Kaptitel 5.1
JAVA: 5.1 Klassen, Objekte und Referenzvariablen

Kapitel 6.1.1 - 6.1.4
JAVA: 6.1.1 Klassen deklarieren
JAVA: 6.1.2 Eigenschaften oder Attribute von Klassen
JAVA: 6.1.3 Methoden
JAVA: 6.1.4 Konstruktoren

Während ich mich also durch ein amerikanisches Tutorial und den oben angegeben Links geschlagen habe, bin ich auf einige Fragen gestoßen. Diese habe ich mir selbst beantwortet und möchte nun von euch wissen, ob ich diese Richtig beantwortet habe.

1. Zusammenhang Klasse <>Objekt

Nach der Klasse wird das Objekt gebaut, es ist sozusagen die Vorlage. Allerdings braucht man für die Interaktion beim objektorientiertem Programmieren die Objekt. Also schreibe ich alles was das Objekt machen soll in die Klasse. Also ist die Klasse sozusagen die Vorlage für das spätere Objekt. Wie z.B. ein Bauplan. Kann ich ein Objekt verändern, also mit Methoden belegen? Oder ist das nur in den Klassen möglich. Das würde ja wiederum heißen, dass Objekte einfach stupide Abbildungen einer Klasse sind die agieren. Also muss ein Objekt auch alle Methoden der Klasse besitzen?

2. Methoden
Methoden können also nur in der Klasse geschrieben werden. Es sind sozusagen die Befehle. Dabei kann man unterscheiden durch Rückgabetyp etc. Man kann sich auch in einer Methode auf eine andere Methode beziehen?

Was ist mit einem Referenztyp gemeint?

3. Static

Irgendwann bin ich auf den Befehlszusatz "Static" gestoßen. Den kann ich leider gar nicht einordnen?

4. Dot notation
Die Dot notation erlaubt das beziehen von Methoden aus anderen Klassen. Dadurch, dass zuerst klassenname(punkt)Methode geschrieben wird.

Würde mich über einige Antworten sehr freuen🙂
Vielen Danke im Voraus!

LG
 
zu 1: Du kannst eine neue Klasse erzeugen, welches eine bestehende Klasse erbt. Deine Klasse hat nun die Methoden der Elternklasse geerbt. Deine Klasse kann bestehende Methoden der Elternklasse überschreiben oder ganz neue hinzufügen.

zu 2:Eine Methode kann sich auf eine andere beziehen. Ein Referenztyp ist eine Variable die auf ein Objekt verweist.

zu 3 gilt es zwischen Variablen und Methoden zu unterscheiden: Ist eine Variable static deklariert, dann gehört diese zur Klasse und wird darum auch Klassenvariable genannt. Eine statische Methode existiert auch ohne Klasse d.h. diese kann ohne Instantierung aufgerufen werden.

zu 4: Ja, das ist so wie Du beschreibst. Das ist insbesondere dann notwendig, wenn eine Methode in verschiedenen Klassen den gleichen Bezeichner hat. So wird klar, welche gemeint ist.
 
Zu 1, was ist wenn ich allerdings nur ein Objekt der Klasse erstelle? Hat das Objekt dann alle Methoden der Klasse?
 
Ja, das erstellte Objekt hat alle Methoden. Ob du diese alle Anwenden kannst, hängt von der Sichtbarkeit (public,protected,private) ab. Das Objekt besitzt ebenso die Methoden der Elternklasse. Mit denen hast du wahrscheinlich auch schon einigemal gearbeitet: [c]toString(),equals(...),...[/c] sind alles Methoden, die deine Klasse von java.lang.Object erbt, auch wenn du das nie explizit angegeben hast (Jede Klasse die du erstellt, erbt automatisch von java.lang.[japi]Object[/japi]).
 
Zuletzt bearbeitet von einem Moderator:
Zu 3, gut eine Variable kann ja Static sein. Allerdings ein Methode? Wie ist das gemeint?
 
zu 3 gilt es zwischen Variablen und Methoden zu unterscheiden: Ist eine Variable static deklariert, dann gehört diese zur Klasse und wird darum auch Klassenvariable genannt. Eine statische Methode existiert auch ohne Klasse d.h. diese kann ohne Instantierung aufgerufen werden.

Müsste es nicht eher heißen: Eine statische Methode existiert auch ohne Objekte ?
Jede Methode, auch statische, gehören zu einer Klasse.
Nur statische Methoden kann man direkt auf der Klasse aufrufen und sie können ausschließlich auf statische Variablen der Klasse zugreifen.
Nicht statische dagegen kann man nur auf Instanzen einer Klasse aufrufen, d.h. auf einem Objekt.
Diese können dann auch auf Felder der Klasse, also Variablen der Klasse, die nicht statisch sind, zugreifen.
 
Dadurch brauchst du keine Instanz der Klasse um diese Methode aufzurufen (da sie eine Klassenmethode ist). Beispiel:
Java:
public class Demo {
     public static int add(int a, int b) {
         return a+b;
     }
}

diese Methode könntest du mit folgender Zeile aufrufen:
Java:
int ergebnis=Demo.add(2,4);

Allerdings hast du aus Methoden, die static sind, keinen (direkten) Zugriff auf non-static Variablen, da diese eine Referenz benötigen.
 
Man kann sich auch in einer Methode auf eine andere Methode beziehen?
Was meinst du mit "beziehen"? Methoden können durchaus andere Methoden aufrufen, wenn es das ist, was du meinst. Wenn du allerdings wissen willst, ob sich auch Methoden innerhalb von Methoden definieren lassen - nein, das geht nicht.

Zu 4: die Punktnotation erlaubt es dir generell, auf Eigenschaften einer anderen Klasse zuzugreifen (die korrekte Sichtbarkeit vorausgesetzt). Sowohl auf Methoden als auch Felder/Variablen lässt sich über die Punktnotation zugreifen:
Java:
public class Dummy() {

	public static final String SOME_CONSTANT = "Dummy";
	private static int idCounter = 0;

	public int id;
	private String something;

	/**
	 *	Konstruktor, dementsprechend KEIN Rückgabewert.
	 */
	public Dummy(String something) {
		this.id = ++idCounter;
		this.something = encode(something);
	}

	public String getSomething() {
		return something;
	}

	private String encode(String str) {
		// Irgendwelcher Code
	}

	public static boolean isValidSomething(String str) {
		// Irgendwelcher Code
	}
}

public class Showcase {

	public static void main(String[] args) {
		Dummy.SOME_CONSTANT;	// Korrekt, SOME_CONSTANT ist statisch (->keine Instanz nötig) und public (->öffentlicher Zugriff erlaubt).
		Dummy.idCounter;		// Compilerfehler, da idCounter private ist.
		
		Dummy.id;				// Compilerfehler, da id eine Instanzvariable ist und wir NICHT über eine Instanz, sondern die Klasse zugreifen.
		
		Dummy.isValidSomething("Hui");	// Korrekt, die Methode ist public und static, kann also OHNE Instanz der Klasse aufgerufen werden.
		
		Dummy dummyInstance = new Dummy("Hui");	// Instanz anlegen.
		dummyInstance.id;				// Korrekt, id ist eine Instanzvariable (->Instanz nötig) und public.
		dummyInstance.something;		// Compilerfehler, da private.
		
		dummyInstance.getSomething();	// Aufruf einer öffentlichen Methode, korrekt.
		dummyInstance.encode("Hui");	// Compilerfehler, da encode(String) private ist.
	}
}
 
Zuletzt bearbeitet von einem Moderator:
1. Zusammenhang Klasse <>Objekt

Nach der Klasse wird das Objekt gebaut, es ist sozusagen die Vorlage. Allerdings braucht man für die Interaktion beim objektorientiertem Programmieren die Objekt. Also schreibe ich alles was das Objekt machen soll in die Klasse. Also ist die Klasse sozusagen die Vorlage für das spätere Objekt. Wie z.B. ein Bauplan. Kann ich ein Objekt verändern, also mit Methoden belegen? Oder ist das nur in den Klassen möglich. Das würde ja wiederum heißen, dass Objekte einfach stupide Abbildungen einer Klasse sind die agieren. Also muss ein Objekt auch alle Methoden der Klasse besitzen?

2. Methoden
Methoden können also nur in der Klasse geschrieben werden. Es sind sozusagen die Befehle. Dabei kann man unterscheiden durch Rückgabetyp etc. Man kann sich auch in einer Methode auf eine andere Methode beziehen?

Was ist mit einem Referenztyp gemeint?

3. Static

Irgendwann bin ich auf den Befehlszusatz "Static" gestoßen. Den kann ich leider gar nicht einordnen?

4. Dot notation
Die Dot notation erlaubt das beziehen von Methoden aus anderen Klassen. Dadurch, dass zuerst klassenname(punkt)Methode geschrieben wird.

Würde mich über einige Antworten sehr freuen🙂
Vielen Danke im Voraus!

LG

1. Wie du schon richtig angemerkt hast, ist die Klasse der Bauplan für das Objekt. Veränderungen von Methoden in diesen Objekten, aber nicht in der Klasse, sind nicht möglich. Ein Objekt besitzt immer alle Methoden der Klasse. Man muss an dieser Stelle vielleicht noch sagen, dass es bei der Klasse praktisch keine Grenzen gibt, wie diese auszusehen hat. Du kannst dort beliebig viele, komplexe, Methoden einbauen 🙂

2. Du kannst aus einer Methode alles aufrufen, was dies auch zulässt: Andere Methoden oder das Erstellen von Objekten. Das Programm wird nur durch Methoden gesteuert, denn da liegt ja der eigentliche Programmieraufwand drine 😉

2.1 Java ist ja OO. Dabei werden primitive typen (int, char, long, etc.) anders behandelt als Objekte.
Variablen haben auf Objekte immer nur eine Referenz im Speicher. Darum musst du dich nicht sonderlich kümmern, da Java das für dich macht, aber es ist wichtig zu wissen, dass zum Beispiel:
Java:
MeineKlasse m = new MaineKlasse();
MeineKlasse k = m;
durch das zuweisen von m auf k kein Objekt kopiert wird, sondern lediglich die Referenz übergeben wird. Dabei zeigen beide noch auf das selbe Objekt.

3. static bedeutet, dass von der Variable/Methode kein Objekt benötigt wird, um diese zu benutzen.
Wenn du eine Methode static deklarierst, dann kannst du diese Methode an der Klasse aufrufen, ohne ein Objekt davon zu erzeugen. Wenn du das mit einer Variable machst, haben alle Objekte einer Klasse alle diese Variable gemeinsam. Wenn ein Objekt diese verändert, dann ist sie für alle anderen auch verändert. So kann man zum Beispiel einen Zähler für Objekte bauen.

4. Ja das kann man damit machen.
 

Zurück
Oben