#1 19. November 2007 Abstrakte Klassen Ich habe wohl ein paar zuviele Fragen auf dem Herzen, möchte aber dennoch das Grundprinzip der Klassen verstehen etc., ich habe ein Buch nur dort ist es nur sehr grob erklärt. so zu meinen Fragen: Ist das richtig: - Eine Basisklasse kann nicht aus der Main aufgerufen werden sondern über die Subklasse. - static bedeutet das kein Bezug zur Klasse besteht z.B. Klasse MyClass = new Klasse(); - non-static hat Bezug zu einer Klasse z.B. Klasse.getName(); Zu meinem Problem, ich teste mich gerade an einem Programm ob ich abstrakte Klassen verstanden habe, natürlich ohne Mappe und Hilfen. Aber irgentwie komm ich hier nicht weiter: Main: Code: public class Main { public static void main(String[] args) { Gothic3 Spiel = new Gothic3(); System.out.println(Spiel.getSpiel()); System.out.println(Spiel.getSpielArt()); } } Basisklasse Spiele: Code: public abstract class Spiele { // Anfang Variablen String SpielArt="Rollenspiel"; // Ende Variablen public Spiele(){ } // Anfang Ereignisprozeduren public String getSpielArt(){ return SpielArt; } // Ende Ereignisprozeduren } Subklasse Gothic3: Code: public class Gothic3 extends Spiele{ // Anfang Variablen String SpielArt; String SpielName="Gothic3"; // Ende Variablen // Anfang Ereignisprozeduren public Gothic3(){ } public String getSpiel(){ return SpielName; } public void setSpielArt(String SpielArt){ this.SpielArt=SpielArt; } public String getSpielArt(){ return SpielArt; } // Ende Ereignisprozeduren } Ausgabe: Gothic3 null gewünschte Ausgabe: Gothic3 Rollenspiel Vielen Dank! + Multi-Zitat Zitieren
#2 19. November 2007 AW: Abstrakte Klassen Dadurch das du in der Klasse Gothic3 nochmal "String SpielArt;" schreibst, überschreibst du quasi die Variable der Basisklasse. Die abgeleitete nimmt alles von der Basisklasse mit. Du musst daher die Variablen nicht nochmal deklarieren. Genauso wie die Methode getSpielArt() in Gothic3. Du überschreibst damit die der Basisklasse. Das macht nur Sinn wenn du in der Methode was anders machst. + Multi-Zitat Zitieren
#3 19. November 2007 AW: Abstrakte Klassen durch abstract erbt die Subklasse alle Methoden und Attribute? Achja wie rufe ich eine Klasse auf wenn ich z.B. Enter drücke bei C++ war das ja getchar(code) oder getch(); (beliebige Taste); hier ist es addKeyListener(Methode)? Das Programm muss ja anhalten um auf den Befehl zu warten. + Multi-Zitat Zitieren
#4 19. November 2007 AW: Abstrakte Klassen Um in der Abgeleiteten Klasse die Methoden neu zu definieren, musst du sie in der Basisklasse als virtual deklarieren (Geht bei Java glaub mit dem Schlüsselwort "virtual") Wenn du sie dann in der Abgeleiteten Klasse normal verwendest, wird automatisch die richtige funktion aufgerufen (siehe Polymorphie) + Multi-Zitat Zitieren
#6 19. November 2007 AW: Abstrakte Klassen Stimmt habe ich gerade getestet geht auch ohne virtual habe aber noch eine Frage (siehe oben)^^ Achja wie rufe ich eine Klasse auf wenn ich z.B. Enter drücke bei C++ war das ja getchar(code) oder getch(); (beliebige Taste); hier ist es addKeyListener(Methode)? Das Programm muss ja anhalten um auf den Befehl zu warten. mfg klaiser Bewertungen sind für alle raus! + Multi-Zitat Zitieren
#7 19. November 2007 AW: Abstrakte Klassen Wenn etwas static ist, ist es in allen instanzen der Klasse verfügbar Also alle Instanzen benutzen da dasselbe Objekt. mal ein Beispiel Code: public class NeKlasse { private static int counterA = 0; private int counterB = 0; public NeKlasse() { counterA++; counterB++; } public String getCounter() { return Integer.toString(counterA) + " | " + Integer.toString(counterB); } } public class Main { public static void main(String[] args) { NeKlasse a = new NeKlasse(); NeKlasse b = new NeKlasse(); NeKlasse c = new NeKlasse(); System.out.println(a.getCounter); System.out.println(b.getCounter); System.out.println(c.getCounter); } } Ausgabe müsste sein Code: 1 | 1 2 | 1 3 | 1 Wenn Methoden statisch sind, kannst du sie ohne Instanz benutzen, also z.B. NeKlasse.methode() In diesen Methoden kannst du dann logischerweise nicht auf Instanz-Variablen/Methoden zugreifen Hab jetzt blöderweisse nix zum Testen da, müsste aber halbwegs stimmen + Multi-Zitat Zitieren