Klausurfrage

JavaMaddin

Mitglied
Wir sollen ein static - Klasse in eine non-static Klasse umändern

Worauf muss man dabei achten?

Meine Punkte wären:
- muss einen Konstruktor enthalten
- alles ohne static natürlich
- Instanzvariablen sollten vorhanden sein
- Methode sollte public sein
 
Ich wusste zwar nicht, dass eine Klasse static sein kann, aber

1) Min. ein Konstruktor ist IMMER vorhanden.
3) Eine Instanzvariable ist doch einfach nur eine Variable die eine Instanz gespeichert hat, oder? Wenn du in der Ursprungsklasse keine anderen Objektinstanzen brauchst, warum willst du dann später eine verwenden? Das würde doch der Aufgabe wiedersprechen, da die Klasse ja (denke ich zumindest) ziemlich gleich bleiben sollte. Bis auf die eben geforderten Änderungen.
4) Egal ob eine Methode static oder nicht ist, die Sichtbarkeitsmodifikatoren gelten gleich. Muss eine Methode nur in der eigenen Klasse aufgerufen werden, sollte sie privat bleiben, auch wenn sie static ist.
 
Klassen können nur innerhalb einer anderen Klasse static sein. Das drückt dann aus, dass diese "inner class" keine Referenz zur Klasse drum herum hat.

Was du wahrscheinlich meinst ist eine Klasse mit statischen Methoden in eine mit nicht "normalen" Instanz-Methoden zu wandeln.

- Konstruktor wäre gut, ist aber kein Zwang, da es den default Konstruktor gibt, den du auch schon in deiner bisherigen Klasse hast.

- Instanzvariablen sollten wenn nötig vorhanden sein. Oder wenn die Variable bei allen Instanzen gleich ist, kann diese auch static sein.

- "alles ohne static". Naja das ist etwas einfach ausgedrückt. Nicht-statische Methoden sind dazu da mit den Instanzvariablen zu arbeiten.
Als Vergleich compareTo von einer Klasse die Comparable ist oder eines Comparators.
Comparator sind eine eigene Klasse, die eine Methode compare(Object a, Object b) enthalten. Daher vergleicht a mit b.
Oder eine Klase implementiert das Interface Comparable. Dadurch implementiert es die Methode compareTo(Object b);
Daher ruft man das mit a.compareTo(b) auf anstatt Comparator.compare(a,b)
 
Ich kann mir gut vorstellen, dass man eine Klasse bekommt, die ein zwei statische Methoden hat, die alle Parameter als Methodenparameter übergeben bekommen und evtl. ein oder zwei statische Variablen haben. Die Aufgabe, die Klasse umzubauen könnte zum Ziel haben, zu erkennen, welche der Methodenparameter eigentlich Instanzvariablen sein könnten weil sie eben den Zustand des Objektes widerspiegeln.

In dem Fall ist es dann notwendig, eben diese Variablen als Instanzvariablen anzulegen, die entsprechenden Methoden eben nicht statisch zu machen und Konstruktoren anzubieten, die die neuen Instanzvariablen intitialisieren. Ein Client muss dann potentiell den statischen Methodenaufruf durch das Instantiieren eines Objektes ersetzen und die nicht-statische Methode auf der Objektinstanz aufrufen.

Finde ich eigentlich eine nette Idee um den Unterschied zwischen prozeduralem Programmieren in Java (was man mit static ja eigentlich tut) und dem objektorientierten Ansatz zu verdeutlichen.

Gruß
Ollie
 

Neue Beiträge

Zurück