[Java] Abstrakte Klassen

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von klaiser, 19. November 2007 .

  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!
     
  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.
     
  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.
     
  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)
     
  5. 19. November 2007
    AW: Abstrakte Klassen

    Ist in Java nicht nötig.
     
  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!
     
  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
     
  8. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.