Fragen zu Klassenhierarchien und Weiteres

EG2009

Mitglied
Hallo an alle!

Schaue mir gerade mal wieder nen Quellcode an und werde aus manchen - vermeindlichen einfachen - Dingen nicht ganz schlau.
Vielleicht kann mir die erfahrenere Riege hier mal etwas auf die Sprünge helfen =).
Wäre jedenfalls super.

Frage 1:
Folgender Code liegt mir vor:

Java:
package net.app.memory;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseEvent;
import java.util.Vector;
import javax.swing.JComponent;

public class Card extends JComponent {
//.....Variablendeklarationen

  public Card(Image face, Image back) {
    super();
    this.face = face;
    this.back = back;
    addMouseListener(new MouseAdapter(this));
  }
//.....weiterer Code

Frage: Wenn die Klasse Card die Klasse javax.swing.JComponent importiert, so müsste sie ja eigentlich über deren Methoden verfügen, oder? Warum aber wird beim Konstruktor Card per super() auf den Konstruktor der Mutterklasse zugegriffen? Durch den Import müsste die Methode doch auch in der Klasse Card verfügbar sein?


Frage 2:
Folgende Getter und Setter liegen vor:

Java:
  public void setBack(Image back) {
    this.back = back;
  }

  public Image getBack() {
    return back;
  }

//...etwas weiter unten soll ein String zurückgegeben werden:

 public String getBackFile() {
    return this.backFile;

Frage: Woher weiß ich, wann der Rückgabewert mit "this." eingeleitet werden muss und wann nicht?


Frage 3:
Listeners und Events:

Java:
 protected synchronized void notifyCard(CardEvent e) {
    for (int i = 0; i < listeners.size(); i++)
      ((CardListener)listeners.elementAt(i)).turned(e);
  }

Frage: Kann mir jemand in einfachen Worten erklären, was hier das "synchronized" bewirkt? So in Bienchen und Blümchen Sprache :D?

Noch was grundsätzliches:
Ist der hiesige Parameter "e" fest definiert oder könnte ich ihn auch xyz nennen? Gibt es irgendwelche festen Konventionen, nach denen die Parameter-Buchstaben vergeben werden? Der Autor des Quellcodes verwendet für mehrere Event Typen den Parameter "e"......


Vielen Dank für die Starthilfe :).

Gruß, Seb
 

EG2009

Mitglied
Eins noch:

Wofür steht das "adaptee" in folgender Klasse?
Ich versteh den Aufbau hier irgendwie nicht?!

Java:
class MouseAdapter extends java.awt.event.MouseAdapter {
  Card adaptee;

  protected MouseAdapter(Card adaptee) {
    this.adaptee = adaptee;
  }

  public void mousePressed(MouseEvent e) {
    adaptee.mousePressed(e);
  }
 

X3TitanCore

Bekanntes Mitglied
Hallo an alle!

Schaue mir gerade mal wieder nen Quellcode an und werde aus manchen - vermeindlichen einfachen - Dingen nicht ganz schlau.
Vielleicht kann mir die erfahrenere Riege hier mal etwas auf die Sprünge helfen =).
Wäre jedenfalls super.

Frage 1:
Folgender Code liegt mir vor:

Java:
package net.app.memory;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseEvent;
import java.util.Vector;
import javax.swing.JComponent;

public class Card extends JComponent {
//.....Variablendeklarationen

  public Card(Image face, Image back) {
    super();
    this.face = face;
    this.back = back;
    addMouseListener(new MouseAdapter(this));
  }
//.....weiterer Code

Frage: Wenn die Klasse Card die Klasse javax.swing.JComponent importiert, so müsste sie ja eigentlich über deren Methoden verfügen, oder? Warum aber wird beim Konstruktor Card per super() auf den Konstruktor der Mutterklasse zugegriffen? Durch den Import müsste die Methode doch auch in der Klasse Card verfügbar sein?


Frage 2:
Folgende Getter und Setter liegen vor:

Java:
  public void setBack(Image back) {
    this.back = back;
  }

  public Image getBack() {
    return back;
  }

//...etwas weiter unten soll ein String zurückgegeben werden:

 public String getBackFile() {
    return this.backFile;

Frage: Woher weiß ich, wann der Rückgabewert mit "this." eingeleitet werden muss und wann nicht?


Frage 3:
Listeners und Events:

Java:
 protected synchronized void notifyCard(CardEvent e) {
    for (int i = 0; i < listeners.size(); i++)
      ((CardListener)listeners.elementAt(i)).turned(e);
  }

Frage: Kann mir jemand in einfachen Worten erklären, was hier das "synchronized" bewirkt? So in Bienchen und Blümchen Sprache :D?

Noch was grundsätzliches:
Ist der hiesige Parameter "e" fest definiert oder könnte ich ihn auch xyz nennen? Gibt es irgendwelche festen Konventionen, nach denen die Parameter-Buchstaben vergeben werden? Der Autor des Quellcodes verwendet für mehrere Event Typen den Parameter "e"......


Vielen Dank für die Starthilfe :).

Gruß, Seb


Import heißt nur ich kann das Zeug verwenden, mehr nicht.
Card erweitert JComponent. Deswegen super() um den Konstruktor von JComponent aufzurufen und dort evtl. vorhandene initialisierungen auszuführen. Ohne super() passiert das nicht. Der Card Konstruktor heißt schließlich anders als der von JComponent.

this ist eine Referenz auf die zugehörige Instanz.

e kannste nennen wie du willst.
 

despranto

Mitglied
HEy hier noch ne kleine Hilfestellung zum zweiten Post

Card adaptee;

Deklariert ein Objekt vom Typ Card; Das gehört zur Klasse!

protected MouseAdapter(Card adaptee) {
this.adaptee = adaptee;
}

Is im prinzip bloß eine setter Methode! Das Übergebene Card Objekt wird dem der Klasse zugewiesen!

Wenn du mehr zum MouseAdapter wissen willst guck mal unter
MouseAdapter (Java 2 Platform SE v1.4.2)

Wird mich freuen wenn nen bisschen hilft http://1.1.1.5/bmi/www.java-forum.org/images/smilies/wink.gif
 
G

Gast2

Gast
Is im prinzip bloß eine setter Methode! Das Übergebene Card Objekt wird dem der Klasse zugewiesen!
Das ist eher ein Konstruktor ;)
Dem wird das Card Objekt übergeben. Wenn nen Mouseevent eintritt wird das event an deine Karte weitergegeben wo du das dann wohl verarbeitest.
 

EG2009

Mitglied
Danke schonmal für die Antworten.

@Unsympath
Hast du ne gute Alternative als erstes Buch?
Finde es auch nicht wirklich gelungen.
 

Jan_Gerhard

Mitglied
Zu Frage 3:
synchronized bedeutet, dass bei dem Zugriff auf gemeinsame Daten oder Methoden immer nur ein Thread nach dem anderen zugelassen wird. Handelt es sich um einen kritischen Block, also einen Bereich der nur seriell und nicht parallel von mehreren Aufrufern/Threads ausgeführt werden sollte weil ansonsten unschöne Seiteneffekte auftreten könnten, kann dieser mit synchronized geschützt werden.
In Deinem Beispiel wird also sichergestellt, dass protected synchronized void notifyCard(CardEvent e) nur schön geordnet nacheinander ausgeführt werden kann.
 

Tolga

Neues Mitglied
Jap, kann dem nur zustimmen, neben dem Java Skript unseres Profs lerne ich auch aus dem Buch Java ist eine Insel...zumal das ebook jedem kostenlos zur Verfügung steht.
 

EG2009

Mitglied
Auch ohne extra super() hinzuschreiben wird der Konstruktor der Vaterklasse aufgerufen...

Ist das so?

Mache ich die Methoden der Vaterklasse durch einen Import dann quasi nur bekannt, oder wie kann man sich das vorstellen? Ich dachte (fälschlicherweise), dass ein Import immer eine Vereinleibung von Methoden ist....
 

Landei

Top Contributor
Sobald du einen Konstruktor definierst, wird natürlich nicht automatisch jener der Superklasse aufgerufen.

Doch, natürlich. Probiers aus:

Java:
public class A {
  public A() {
     System.out.println("Aaaa!!");
  }
}

public class B extends A {
  public B() {
     System.out.println("Beeh!!");
  }
}

Bei Instantiierung eines B wird erst Aaaa!! und dann Beeh!! ausgegeben, also als erstes im B-Konstruktor implizit der A-Konstruktor aufgerufen.
 

X3TitanCore

Bekanntes Mitglied
Das ist schon richtig. Nur du kannst die Initialisierungen der Klassen A nicht im Konstruktor der Klasse B überschreiben wenn du nicht super() aufruftst.

Wenn du beim A Konstruktor int x = 0 hast könntest du den Wert im Konstruktor von B überschreiben und dadurch A anders initialisieren. Das geht nur mit super(), wenn ich das richtig verstanden habe.
 
G

Gas

Gast
Wenn du beim A Konstruktor int x = 0 hast könntest du den Wert im Konstruktor von B überschreiben und dadurch A anders initialisieren. Das geht nur mit super(), wenn ich das richtig verstanden habe.
Wenn du im Konstruktor von A einfach int x = 0; stehen hast und sonst nichts, kannst du in keinem im Konstruktor von B auf x zugreifen. Egal ob du jetzt super() davor schreibst oder nicht.
Auf Instanzvariablen hast du Zugriff. Und auch nur dann, wenn sie public oder protected sind.

super() aufzurufen ist sinnvoll, wenn man Parameter direkt an die Vaterklasse weitergeben möchte.
Z.B. wenn man extends JFrame hat und in seiner Klasse einen Konstruktor hat mit (String title) kannst du super(title); benutzen anstatt über die setTitle() Methode zu gehen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Zrebna Fragen zu einem Klassendiagramm Java Basics - Anfänger-Themen 8
H Fragen zu Wrapperklassen Java Basics - Anfänger-Themen 29
S Best Practice Fragen zu Projektstruktur einer Datenbank-Abfrage-App (MVC) Java Basics - Anfänger-Themen 13
A Bei VierGewinnt fragen ob man gegen CPU oder Menschen spielen will. Java Basics - Anfänger-Themen 7
A Bei VierGewinnt vorher fragen, ob man gegen den Computer spielen möchte oder gegeneinander. Java Basics - Anfänger-Themen 1
A Bei VierGewinnt fragen, ob man gegen den Computer spielen möchte oder gegeneinander Java Basics - Anfänger-Themen 1
sserio Wie kann man nach einer Klasse fragen? Java Basics - Anfänger-Themen 12
G Fragen zu Kompelierfehler in Aufgabe. Java Basics - Anfänger-Themen 25
E Bäume/ allgemeine Fragen Java Basics - Anfänger-Themen 21
O Falsche Antworten zu Fragen Java Basics - Anfänger-Themen 4
S Diverse Fragen vor Schulaufgabe ;) Java Basics - Anfänger-Themen 4
S Fragen zu Ausgabe double und float Java Basics - Anfänger-Themen 3
B fragen zu Aufbau eines UML-Klassendiagramm Java Basics - Anfänger-Themen 1
C 3 Fragen rund um Klassenattribute Java Basics - Anfänger-Themen 8
L Erste Schritte Log4J Fragen Java Basics - Anfänger-Themen 5
NeoLexx Fragen zu diversen Elementen der Javabibliothek Java Basics - Anfänger-Themen 5
D Budget Manager fragen zur Umsetzung Java Basics - Anfänger-Themen 9
N Fragen zur Datenspeicherung Java Basics - Anfänger-Themen 45
T Java Anfänger mit konkreten Fragen Java Basics - Anfänger-Themen 2
CT9288 Fragen zu Java Java Basics - Anfänger-Themen 16
W Fragen zu Generics Java Basics - Anfänger-Themen 14
T ObjectInput/OutputStream Fragen zur Funktionsweise Java Basics - Anfänger-Themen 3
J Fragen zu einer Methode Java Basics - Anfänger-Themen 3
J Fragen zum Code aus dem Buch "Schrödinger programmiert Java 2.te Ausgabe" Java Basics - Anfänger-Themen 6
Z Fragen zu Exception (Throws/throw) Java Basics - Anfänger-Themen 7
J Fragen zu Input/Output Java Basics - Anfänger-Themen 3
J Erste Schritte Oracle Tutorials zu Java 8 - Fragen dazu Java Basics - Anfänger-Themen 1
H Java Quereinsteiger Roadmap und Fragen Java Basics - Anfänger-Themen 29
H fragen Java Basics - Anfänger-Themen 15
M Samelsarium Grundlegender Fragen 2 Java Basics - Anfänger-Themen 9
M Sammelsarium an Grundlagen Grundlagen Fragen Java Basics - Anfänger-Themen 11
B Java ist / wird kostenpflichtig. Ein paar Fragen Java Basics - Anfänger-Themen 1
J Fragen zu synrchonized und kritischen Abschnitten Java Basics - Anfänger-Themen 5
S Fragen zu einem Rechentrainer Java Basics - Anfänger-Themen 2
B Java Vererbung Fragen (zu Code Beispiel) Java Basics - Anfänger-Themen 3
J Wo kann man Fragen zu ireport stellen. Java Basics - Anfänger-Themen 0
M Fragen zum Anlegen und Benutzen von Listen Java Basics - Anfänger-Themen 9
G Ein paar Anfänger Fragen zu StdDraw Java Basics - Anfänger-Themen 4
D Fragen zur Klassen Java Basics - Anfänger-Themen 4
Aprendiendo Zwei Fragen und ein geerbtes "protected"-Attribut Java Basics - Anfänger-Themen 2
J Interface Fragen bezüglich "Sauberkeit" von Code Java Basics - Anfänger-Themen 5
D Objekte-Fragen Java Basics - Anfänger-Themen 1
V Erste Schritte Habe Fragen zu der For und While Schleife als auch Inkrement und Dekrement Java Basics - Anfänger-Themen 4
D Anfänger-Fragen(Parameter einer Methode) Java Basics - Anfänger-Themen 7
K Zwei Fragen zu Graphics/Graphics2D Java Basics - Anfänger-Themen 5
R Fragen über den Konstruktor Java Basics - Anfänger-Themen 0
Azazel Ein paar Fragen zu Methodenaufrufen(java.awt) Java Basics - Anfänger-Themen 2
S Erste Schritte Fragen zur For-Schleife Java Basics - Anfänger-Themen 9
C Interface Fragen zum Interface Java Basics - Anfänger-Themen 7
GreenTeaYT Exception und zur OOP fragen? Java Basics - Anfänger-Themen 3
C Fragen zum Spigot Plugin (1.8) Java Basics - Anfänger-Themen 6
J Fragen zu Exceptions Java Basics - Anfänger-Themen 24
N Quiz- Fragen zufällig anzeigen lassen Java Basics - Anfänger-Themen 7
J Verschieden Fragen über Java Programmierung Java Basics - Anfänger-Themen 3
L Viele Fragen zu den Grundlagen Java Basics - Anfänger-Themen 5
B Fragen zu ZIP-File Java Basics - Anfänger-Themen 9
L fragen zu arrays Java Basics - Anfänger-Themen 8
L Fragen zu selbstgeschriebenem Programm Java Basics - Anfänger-Themen 5
M Fragen zum Auslesen von HTML Seiten Java Basics - Anfänger-Themen 5
J Threading-Aufgabe. Totale Noob Fragen, aber bitte trotzdem beantworten ;) Java Basics - Anfänger-Themen 7
S Java Fragen Konstruktor & Statische Methoden Java Basics - Anfänger-Themen 4
K Erste Schritte Frage Antwort Spiel - Fragen zur Planung Java Basics - Anfänger-Themen 2
C Java Applet Fragen: Serialisierung, Excel import Java Basics - Anfänger-Themen 2
Anfänger2011 2 kleine Fragen zu ArrayListen Java Basics - Anfänger-Themen 5
S Fragen zu Ausdrücken&Bedingungen Java Basics - Anfänger-Themen 5
A 2 kurze Anfänger fragen Java Basics - Anfänger-Themen 6
H grundlegende Fragen Java Basics - Anfänger-Themen 3
V Interface ich schäme mich das zu fragen, aber ich schaff nicht ein Text zu zentrieren :( [javaFX] Java Basics - Anfänger-Themen 6
N Programm: Fragen beantworten Java Basics - Anfänger-Themen 6
C Anfänger Anfänger Fragen Java Basics - Anfänger-Themen 8
Z Compiler-Fehler LinkedList Fragen Java Basics - Anfänger-Themen 4
D Rekursion Allgemeine Fragen Java Basics - Anfänger-Themen 2
D [Fragen] zu Methoden Java Basics - Anfänger-Themen 2
S Fragen zur Implementierung eines Binärbaums Java Basics - Anfänger-Themen 3
T Ein paar Fragen zu OOP und Java. Java Basics - Anfänger-Themen 16
J Allgemeine Fragen zur GUI Java Basics - Anfänger-Themen 1
johnnydoe Erste Schritte Erster Blick - erste Fragen Java Basics - Anfänger-Themen 11
DStrohma Grundsätzliche Fragen zu Drag & Drop Java Basics - Anfänger-Themen 1
N Klassen fragen zur getter und setter methode Java Basics - Anfänger-Themen 11
S 3 Fragen, Verzeichnis, GridLayout psoitionieren, Werte für JSpinner Java Basics - Anfänger-Themen 2
T Fragen zu Set / Relationen verknüpfen Java Basics - Anfänger-Themen 4
S 2 Fragen Java Basics - Anfänger-Themen 4
S Hallo und Fragen zu Arbeitsverzeichnis und Menü Java Basics - Anfänger-Themen 8
N Java Fragen... Java Basics - Anfänger-Themen 10
F ExecutorService Fragen! Java Basics - Anfänger-Themen 2
O HashMap Fragen Java Basics - Anfänger-Themen 8
C Fragen zu Arrays Java Basics - Anfänger-Themen 19
T viele "kleine" Fragen... Java Basics - Anfänger-Themen 3
S Fragen zur Implementierung eines Adressbuches Java Basics - Anfänger-Themen 20
S Fragen zu Arrays Java Basics - Anfänger-Themen 6
K Diverse Fragen zum Fehlerlogging Java Basics - Anfänger-Themen 9
N StringReader - Fragen Java Basics - Anfänger-Themen 8
C Einige Fragen zu Frames Java Basics - Anfänger-Themen 7
M Erste Schritte Allgemeine Fragen Java Basics - Anfänger-Themen 4
PaulG Fragen zu Binärbaum Java Basics - Anfänger-Themen 21
P Methoden Aquarium (Fragen zum Scanner) Java Basics - Anfänger-Themen 5
T Erste Schritte Fragen zu meinen kleinen Programm Java Basics - Anfänger-Themen 9
D 2 Fragen: Position ändern vs. LayoutManager / Bilder einfügen im Vordergrund Java Basics - Anfänger-Themen 3
O Zwei Fragen zu Methoden Aufrufen Java Basics - Anfänger-Themen 5
B fragen zur for-schleife und arrays Java Basics - Anfänger-Themen 8

Ähnliche Java Themen


Oben