2016-06-04 5 views
0

Ich habe ein Paket levels und Klassen level_default, level_hard ..., die jeweils einige Methoden wie Load();, MoveEvent();, TouchEvent(); ...Java-Pass-Klasse als Variablentyp?

ich irgendwie die ausgewählte Level-Klasse in einer Variablen namens sagen lässt myLevel speichern möchten

So kann ich dann zum Beispiel myLevel.Load(); verwenden, um die Lade-Methode von diesem spezifischen gespeicherten Ebene aufzurufen.


Bisher habe ich Schalter unter Verwendung von Schleifen die gewünschte Methode aus der ausgewählten Ebene zu nennen.
(... case "1": levels.level_default.load(); break; case "2": levels.level_hard.load(); ...)

Aber wie kann es so gemacht werden, so kann ich nur die Ebene auswählen, und seine Methoden verwenden, ohne dass die ganze Zeit zu überprüfen, welche Ebene verwende ich anrufen die Methode von dieser Ebene?

+2

Sie können eine Superklasse 'Level' erstellen und die darin enthaltenen Methoden definieren. Dann machen Sie die Unterklassen 'Default',' Hard' ... welche 'Level' erweitern. Dann können Sie ein Objekt von "Level" haben und es initialisieren wie "Level lev = new Hard();" (oder "Default", wie Sie es wollen). Auf diese Weise müssten Sie nur die Methode "lev" aufrufen und die erforderlichen Methoden automatisch aus der jeweiligen Klasse aufrufen. – Hackerdarshi

+1

http://www.oracle.com/technetwork/java/codeconventions-135099.html – Tom

+0

@Hackerdarshi Danke, das funktioniert für mich so weit! – Vepir

Antwort

1

Dies klingt wie eine erstklassige Gelegenheit, Polymorphismus zu nutzen. Ich würde vorschlagen, eine Basisklasse oder eine Schnittstelle namens AbstractLevel, ILevel usw. zu erstellen. Dann können Sie jedoch viele Unterklassen oder implementierende Klassen erstellen, die Sie benötigen, wobei jede ihre eigene spezielle Definition der von der Basis beschriebenen API bereitstellt. Wenn Sie die Methode aufrufen, müssen Sie nicht darüber nachdenken, die richtige Methode zu verwenden ... Sie werden die richtige verwenden, da sie in einer polymorphen Klasse aufgerufen wird. Eine schnelle Google-Suche brachte mich zu this article, die Sie untersuchen möchten.

Um wirklich Ihre Frage zu beantworten, here is an article that talks about runtime type detection in Java.

Verwandte Themen