Klassen Klasse in anderer Klasse aufrufen

_Anonymus

Mitglied
Hallo,


ich bin neu hier (Java Anfänger noch dazu) und schreibe ein kleines Spiel in Java. Ich möchte hierzu zwei Level programmieren und jedes Level in eine eigene Klasse packen, welche ich dann in der "Hauptklasse" aufrufe. Aber es funktioniert einfach nicht !!! 😡 🙂

Hier mein Beispiel:


Meine "Hauptklasse"

Java:
class TicTacToe
{
                                        // Hiervor erfolgt dann ne Wahl des Levels, ist jetzt aber uninteressant...

  if (levelwahl == 0) 								

  {
  level1 neu = new level1();   // Hier sollte dann eigentlich die Klasse aufgerufen werden?!
  }
        
  else if (levelwahl == 1) 				
  {
  ...	
  }


Eine meiner Levelklassen

Java:
public class level1 extends TicTacToe
{
	
	public static void main(String[] args)    // Das hier soll dann gemacht werden
	{
	System.out.println("hallo!");
	}

}






Natürlich ist das Programm ausgeschmückter, nur an diesem Teil haperts. Ich bekomm einfach nichts auf den Schirm! Wenn ich das Level auswähle, sollte ja dann eigentlich auf der Konsole "hallo!" erscheinen, aber das Programm läuft und es passiert: Nichts! Was mache ich falsch?

Ich bedanke mich schonmal im Vorraus...

P.S.: Ich bin noch ziemlicher Anfänger in Sachen Java, deswegen diese "sehr einfache" Frage, die es wahrscheinlich für die meisten von euch ist 🙂
 
Was mache ich falsch?
Ohne den kompletten Quellcode ist das schwer zu sagen, außer, dass ein Programm immer nur eine
Code:
main
Methode braucht, nicht jede Klasse.

Was man aber sagen kann ist, dass Du den Sinn der Vererbung noch nicht verstanden hast. Ist ein Level ein TickTackToe? Ich würde sagen nein, denn das Spiel
Code:
besteht
aus verschiedenen Level und diese Beziehung wird nicht über Vererbung realisiert.

Außerdem: worin unterscheiden sich die Level?
Gibt es wirklich unterschiedliches Verhalten? Oder ändert sich das Verhalten nur abhängig von Eigenschaften des Levels (z.B Spielstärke)?

Und als letztes natürlich der obligatorische Hinweis, die Namenskonventionen einzuhalten! Code Conventions for the Java Programming Language: Contents

bye
TT
 
Die Level unterscheiden sich so, dass bei Level eins der Computer per random einen Zug macht in den TicTacToe Rahmen und Level zwei wird eine KI darstellen, wo der Computer nicht verlieren kann. Aber das ist für mein Problem ja erst mal völlig egal, jedenfalls unterscheiden sich die Level und jedes der beiden Level soll eine eigene Klasse bekommen.

das ich die main methode in der Level Klasse rausgenommen habe, habe ich schon probiert, aber es funktioniert trotzdem nichts 🙁

ist das mit

Java:
level1 neu = new level1();

überhaut richtig, wenn ich eine andere Klasse an dieser Stelle aufrufen möchte?


Und das mit der Vererbung....den extends Parameter habe ich nur schonmal eingefügt, weil ich später methoden aus der Hauptklasse in die Level Klasse übernehmen möchte. Aber es geht mir ja vorerst nur überhaupt mal darum, wie ich eine Klasse in einer anderen Klasse aufrufen kann, denn bei mir funktioniert es nicht...
 
Die Level unterscheiden sich so, dass bei Level eins der Computer per random einen Zug macht in den TicTacToe Rahmen und Level zwei wird eine KI darstellen, wo der Computer nicht verlieren kann. Aber das ist für mein Problem ja erst mal völlig egal, jedenfalls unterscheiden sich die Level und jedes der beiden Level soll eine eigene Klasse bekommen.
Es ist auch OK, dass die Level von etwas erben, dass gemeinsame Funktionalität bereit stellt, aber eben nicht vom Spie...

das ich die main methode in der Level Klasse rausgenommen habe, habe ich schon probiert, aber es funktioniert trotzdem nichts 🙁
Das ist eben so, wenn man code, der nicht ausgeführt wird entfernt, das ändert nichts am Verhalten der Anwendung.


ist das mit
Java:
level1 neu = new level1();
überhaut richtig, wenn ich eine andere Klasse an dieser Stelle aufrufen möchte?
Du kanst Klassen nicht "aufrufen". Du kannst statische Methoden in Klassen aufrufen (
Code:
Klassenname.methodenName(...)
) oder Methoden von Objekten (
Code:
variablenName.methodenName()
).

Und dass hast Du hier gemacht: ein Objekt der Klasse
Code:
Level1
zu erzeugt und dies der Variablen
Code:
neu
zugewiesen.
Und das mit der Vererbung....den extends Parameter
das ist kein Parameter sondern ein Schlüsselwort.

habe ich nur schonmal eingefügt, weil ich später methoden aus der Hauptklasse in die Level Klasse übernehmen möchte.
Dann solltest Du diese Methoden auch in die Level-Klasse (beziehungsweise deren künftige gemeinsame Oberklasse) verschieben.
Einfach mal so auf Verdacht zu vererben führt früher oder Später dazu, dass der Code nur mit hohem Aufwand verändert werden kann.

Aber es geht mir ja vorerst nur überhaupt mal darum, wie ich eine Klasse in einer anderen Klasse aufrufen kann, denn bei mir funktioniert es nicht...
Hast Du das Tutorial schon mal durchgearbeitet? Lesson: Classes and Objects (The Java™ Tutorials > Learning the Java Language)

bye
TT
 
Du kanst Klassen nicht "aufrufen". Du kannst statische Methoden in Klassen aufrufen (
Code:
Klassenname.methodenName(...)
) oder Methoden von Objekten (
Code:
variablenName.methodenName()
).


Danke!! Das war was ich suchte....
 
Für eine Leveloberklasse würde sich wohl eine Klasse Namens
Code:
Level
Sinn machen. Da kann Basismaterial / Methoden rein, die in allen Arten von Leveln gebraucht werden können. Dann kannst du auch getrost deine Klasse für das erste Level
Code:
LevelOne
*) nennen und von
Code:
Level
ableiten.

Möchtest du ausdrücken, dass von der Basisklasse
Code:
Level
selbst keine Objekte erzeugt werden können, schreibst du das Schlüsselwort
Code:
abstract
vor
Code:
class
.

Generell empfehle ich neben/vor dem Programmieren des Spiels die Lektüre eines guten Buches. Das Inselbuch etwa ist online ganz umsonst zu lesen.


*) Später wirst du bei so einer Benennung irgendwann an den Punkt kommen, dich zu fragen, was denn nochmal das erste Level war. Dann fällt dir vielleicht irgendwann auch ein, dass du gut ein weiteres Level dazwischen schieben könntest. Oder oder. Dann ist es höchste Zeit, deine Klasse umzubenennen. In diesem Fall wäre
Code:
RandomLevel
wohl eine brauchbare Benennung. Nun wirst du dich sofort, wenn diese Klasse irgendwo im Code auftaucht, daran erinnern, dass dahinter die Methode mit zufälligen Zügen steckt.
 
Zuletzt bearbeitet:

Zurück
Oben