kleine Verständisfrage zur Klassenhierarchie, speziel JMenuItem

Mane123

Bekanntes Mitglied
Hallo zusammen,

wenn ich folge Quelltextzeile gegeben habe:

Java:
JMenuItem.add(AbstractAction)

Welche Methode "add" wird dann aufgerufen?

Wird dann automatisch die Methode add der Klasse java.awt.Container (public Component add(Component comp)) aufgerufen, da es in der Klasse JMenuItem ja keine Methode add(AbstractAction) gibt?

Vielen Dank!

Viele Grüße
 

Lexi

Bekanntes Mitglied
Da AbstractAction nur eine Unterklasse von Object ist, wird denke ich mal Component.add(Object) aufgerufen.

Edit: Ist Quatsch, habe mich in der API verguckt.
 
Zuletzt bearbeitet:

Suinos

Bekanntes Mitglied
Da AbstractAction keine Unterklasse von Component ist, und es keine andere passende Methode gibt, wird der Compiler eine Fehlermeldung ausgeben.

Ansonsten wird immer die 'neueste Version' einer Methode aufgerufen (von der Klassenhierarchie aus).
Ebenso wird bei Überladungen versucht die passendste Methode auszuwählen.

Ein paar Beispiele:
Java:
public static void main(String[] args)
{
	String s = "";
	
	print(s); // calling String with java.lang.String
	
	// Erzwingen eines Aufrufes
	print((Object) s); // calling Object with java.lang.String
	
	// Objekt hinter Referenz ist noch immer ein String
	Object o = s;
	
	print(o); // calling Object with java.lang.String
	
	print(new Object()); // calling Object with java.lang.Object
	
	AB ab = new AB();
	
	// Compilerfehler, da beide Methoden auf der gleichen 'Stufe' stehen
	// print(ab);
}

private static void print(String s)
{
	System.out.printf("calling String with %s\n", s.getClass().getName());
}

private static void print(Object o)
{
	System.out.printf("calling Object with %s\n", o.getClass().getName());
}

static interface A
{
}

static interface B
{
}

static class AB implements A, B
{
}

private static void print(A a)
{
	System.out.printf("calling A with %s\n", a.getClass().getName());
}

private void print(B b)
{
	System.out.printf("calling B with %s\n", b.getClass().getName());
}
 

Mane123

Bekanntes Mitglied
Danke für die Antworten.

Also bei meiner oben genannten Methode erscheint keine Fehlermeldung, die habe ich aus einem Java Lehrbuch.

Warum würde bei deinem Quelltext eine Fehlermeldung erscheinen?

print(ab) ist ja nur ein Objekt und nicht zwei?

Viele Grüße
 

ymene

Bekanntes Mitglied
Die Schreibweise aus deinem Buch scheint recht ungewöhnlich. Variablen werden eigentlich grundsätzlich klein geschrieben, daher liest es sich schon merkwürdig.

Suinos hat schon recht. Bei dir muss eine Fehlermeldung erscheinen, je nachdem was für eine IDE du nutzt. Da JMenuItem keine eigene .add() Methode hat, jedoch eine von der Klasse Container erbt kann sie diese nutzen. Jedoch benötigen alle add-Methoden der Klasse Container ein Objekt vom Typ Component und können daher keine AbstractAction entgegen nehmen.

Möchte man ein JMenuItem mit einer Action versehen, so gibt man diese üblicherweise im Konstruktor mit:

Java:
 JMenuItem item = new JMenuItem( new BlaAction() );

oder setzt sie über die Methode

Java:
JMenuItem item = new JMenuItem();
item.setAction(AbstractAction);

Da man von Abstrakten Klassen keine Objekte erzeugen kann, kann man hier nur Klassen übergeben, die vom Typ AbstractAction erben.
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Schau mal ob das in dem Lehrbuch nicht nur ein Groß/Kleinschreibungs-Tippfehler ist, und
jMenuItem.add(abstractAction);
oder so heißen sollte. Ansonsten wäre mehr Kontext hilfreich.
 

Suinos

Bekanntes Mitglied
Mane123 hat gesagt.:
Warum würde bei deinem Quelltext eine Fehlermeldung erscheinen?

print(ab) ist ja nur ein Objekt und nicht zwei?

Das eine Objekt implementiert aber zwei Interfaces (
Code:
class AB implements A, B
).
Der Compiler kann also nicht wissen, welche Methode aufgerufen werden soll (
Code:
print(A)
oder
Code:
print(B)
), da beide gültig wären.

--

Zu deiner Methode:

Die Klassenhierarchie von
Code:
AbstractAction
sieht so aus:
Code:
Object
 - AbstractAction

Zusätzlich werden diese Interfaces implementiert:
Code:
Action, Cloneable, Serializable
(Quelle)

Um ein
Code:
AbstractAction
-Objekt als Parameter übergeben zu können, muss der Typ des Parameters einer der genannten Typen sein.

Da keine solche
Code:
add
Methode existiert, gibt der Compiler eine Fehlermeldung aus.
 

Mane123

Bekanntes Mitglied
Hallo zusammen,

ich glaub ich weiß was ich falsch gemacht habe:

Ich war gestern nicht zu Hause und hatte das Buch nicht dabei. Ich habe die Codezeile aus dem Kopf heraus getippt.

Korrekt müsste es so lauten (allgemein formuliert):

Java:
JMenu.add(AbstractAction)

In der Klasse JMenu gibt es auch eine Methode add(AbstractAction)


JMenu und AbstractAction sollen wirklich nur die Klasse darstellen, ich glaube das habe ich auch falsch ausgedruckt?

In meinem Listing schaut es tatsächlich so aus:

Java:
dateiOeffnen.add(oeffnenAct);

Wie kann ich denn in Zukunft die oben stehende Zeile allgemein formulieren, dass sie jeder versteht?

Vielen Dank!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Suche jemanden für kleine Uni-Abgabe/ mit Vergütung Java Basics - Anfänger-Themen 1
P eine kleine Aufgabe mit Audio Java Basics - Anfänger-Themen 1
F Java Programm, das kleine Buchstaben in einem String zählen soll und bei großen Buchstaben oder Sonderzeichen abbrechen soll. Java Basics - Anfänger-Themen 5
B Scanner-If/else kleine Abhebungs-Simulation Java Basics - Anfänger-Themen 3
J Kleine Frage zu OOP Java Basics - Anfänger-Themen 371
L Kleine Hilfe beim Schreiben eines Programmes benötigt :D Java Basics - Anfänger-Themen 40
M Welches Framework für kleine WebApp nutzen? Java Basics - Anfänger-Themen 6
D Kleine Probleme mit Split-Befehlen Java Basics - Anfänger-Themen 5
O Datei in mehrere kleine Dateien umwandeln Java Basics - Anfänger-Themen 47
CptK Interface Kleine Kreise in großem Kreis anordnen Java Basics - Anfänger-Themen 3
CT9288 Kleine Simulation programmieren, denkanstöße erbeten Java Basics - Anfänger-Themen 19
S Kleine Frage zu Threads Java Basics - Anfänger-Themen 3
T Klassen Kleine Übung zum Thema Klassen Java Basics - Anfänger-Themen 3
O Kleine Frage zu Iterator und Iterable Java Basics - Anfänger-Themen 6
O Kleine Frage zu cast Java Basics - Anfänger-Themen 3
U DOM Parser, kleine Frage Java Basics - Anfänger-Themen 29
N BierSpiel von "Kopf bis Fuss" eigener Code...kleine Problemstellung. Java Basics - Anfänger-Themen 11
Anfänger2011 2 kleine Fragen zu ArrayListen Java Basics - Anfänger-Themen 5
TheSorm Kleine Speicher Klasse Java Basics - Anfänger-Themen 24
F Speicherlast mehrere GB durch kleine png files? Java Basics - Anfänger-Themen 1
T Kleine Anfängerfrage :) Java Basics - Anfänger-Themen 4
T Kleine Klausurfragen Java Basics - Anfänger-Themen 17
T viele "kleine" Fragen... Java Basics - Anfänger-Themen 3
Q Vererbung Kleine Hilfe bei einer aufgabe Java Basics - Anfänger-Themen 5
DStrohma Best Practice Hibernate für kleine Anwendung nutzen? Java Basics - Anfänger-Themen 4
O Konsole - Kleine Frage Java Basics - Anfänger-Themen 22
N kleine get-Methode anhand einer Aufgabenstellung Java Basics - Anfänger-Themen 13
D Kleine Rechenregel... ++a Java Basics - Anfänger-Themen 4
ScottGambler Kleine Frage Java Basics - Anfänger-Themen 13
M Erste Schritte 2 Kleine Programme Java Basics - Anfänger-Themen 27
T Kleine Frage Java Basics - Anfänger-Themen 2
B Kleine Erklärung zu einer Codezeile benötigt Java Basics - Anfänger-Themen 5
A Java Flächeninhaltsberechnung kleine Frage Java Basics - Anfänger-Themen 8
H Datei in kleine Stücke teilen und wieder erkennen Java Basics - Anfänger-Themen 10
P eigene kleine Datenverwaltung Java Basics - Anfänger-Themen 5
K Erste Schritte Kleine Verständnisfrage Java Basics - Anfänger-Themen 12
S Erste Schritte Zwei kleine Fragen zu [], int und Konstruktor Java Basics - Anfänger-Themen 3
S Erste Schritte Kleine Problem mit Ausgabe in eine Datei Java Basics - Anfänger-Themen 11
G Kleine Java Programme aus Main Java Programm starten..... Java Basics - Anfänger-Themen 3
R Sehr kleine doubles nicht in Exponentialdarstellung ausgeben Java Basics - Anfänger-Themen 3
H Datenbank suche in kleine Schritte Java Basics - Anfänger-Themen 6
O kleine SwingFrame Java Basics - Anfänger-Themen 3
T Kleine Frage zu Collections Java Basics - Anfänger-Themen 3
J BlueJ! 2 kleine Fragen zum Spiel. Java Basics - Anfänger-Themen 3
J Kleine Datenbank programmieren Java Basics - Anfänger-Themen 2
J Eigene kleine Datenbank programmieren Java Basics - Anfänger-Themen 2
H Warum funktioniert diese kleine Methode nicht? Java Basics - Anfänger-Themen 8
E Kleine Hilfe für einen Einsteiger Java Basics - Anfänger-Themen 18
Luk10 Dateipfad beim Laden einer Datei + Neue kleine Frage! Java Basics - Anfänger-Themen 11
U actionListener - eine Kleine Frage Java Basics - Anfänger-Themen 7
J Kleine Frage zu Methoden & OOP Java Basics - Anfänger-Themen 4
B Paar kleine Grundsatzfragen zu Java Java Basics - Anfänger-Themen 5
M kleine und einfache Verständnisfrage Java Basics - Anfänger-Themen 3
S 2 kleine Methoden negieren und print Java Basics - Anfänger-Themen 8
J if und kleine double Werte Java Basics - Anfänger-Themen 7
H kleine zwischenfrage string Java Basics - Anfänger-Themen 3
ModellbahnerTT Kleine Frage zu doppelten Arrays Java Basics - Anfänger-Themen 3
Y Kleine Verständnisfrage zum Thema dynamische Polymorphie Java Basics - Anfänger-Themen 3
M Kleine Konsole mit Threads + KeyAdapter Java Basics - Anfänger-Themen 6
hdi Kleine Design/Convention Frage zu Konstruktoren Java Basics - Anfänger-Themen 4
hdi kleine Verständnisfrage lokale + Member Variable Java Basics - Anfänger-Themen 10
R Kleine Frage zu Array Java Basics - Anfänger-Themen 2
B kleine Probleme beim auslesen einer m3u Datei Java Basics - Anfänger-Themen 3
G eine kleine verwaltung Java Basics - Anfänger-Themen 2
M Eine kleine Frage bzw kleine Theorie frage String[arg] Java Basics - Anfänger-Themen 6
Povlsen84 Initlialisierung, Vector, serialVersionUID . kleine Fragen Java Basics - Anfänger-Themen 4
M Kleine Anfängerfrage Java Basics - Anfänger-Themen 10
D kleine Passwortabfrage erstellen incl. Method zum verändern Java Basics - Anfänger-Themen 7
G jFTP - kleine Fragen Java Basics - Anfänger-Themen 2
P Eine kleine Frage. Java Basics - Anfänger-Themen 4
M kleine sql abfrage Frage Java Basics - Anfänger-Themen 5
K Kleine Fragen über Arrays Java Basics - Anfänger-Themen 8
Z kleine frage zu: Runtime.getRuntime().exec("cmd /c) Java Basics - Anfänger-Themen 3
M Zufallszahl - kleine Frage Java Basics - Anfänger-Themen 4
K Hallo, Ich suche kleine Java Program-Aufgaben zum üben ? Java Basics - Anfänger-Themen 4
S kleine suche Java Basics - Anfänger-Themen 9
D kleine spielerei mit swing Java Basics - Anfänger-Themen 5
A Kleine Tabelle . Java Basics - Anfänger-Themen 8
U kleine datenbank Java Basics - Anfänger-Themen 86
G kleine Frage Java Basics - Anfänger-Themen 4
Q Wie kann man eine kleine pause im Programm machen? Java Basics - Anfänger-Themen 13
J Kleine Connection Frage Java Basics - Anfänger-Themen 4
J kleine java aufgabe: ausgabe von sternchen Java Basics - Anfänger-Themen 20
P kleine db-aufgabe läuft nur suboptimal Java Basics - Anfänger-Themen 8
S ein paar kleine Fragen Java Basics - Anfänger-Themen 4
M Kleine Frage zu If-Bedingung Java Basics - Anfänger-Themen 4
X Kleine Frage: Split Java Basics - Anfänger-Themen 13
G sehr kleine Dezimalzahlen (BigDecimal) falsch angezeigt Java Basics - Anfänger-Themen 5
G Eigene kleine Sprache entwickeln Java Basics - Anfänger-Themen 6
T Kleine Verständnissfrage Java Basics - Anfänger-Themen 7
J Große *.Text Datei zum verschicken in viele kleine Java Basics - Anfänger-Themen 7
A Noch ne kleine Beanshell Frage Java Basics - Anfänger-Themen 7
B eine kleine leichte aufgabe mit einem stack programmieren Java Basics - Anfänger-Themen 2
A Kleine Anfängerfragen u.a.: Kann man Random "speichern& Java Basics - Anfänger-Themen 6
D Interface Verständisfrage Java Basics - Anfänger-Themen 8
G OOP Verständisfrage zu Klassenvariablen Java Basics - Anfänger-Themen 5
W Verständisfrage zu Graphics Objekt Java Basics - Anfänger-Themen 3
G Protected Variablen außerhalb der eigenen Klassenhierarchie sichtbar Java Basics - Anfänger-Themen 5
G Klassenhierarchie in BlueJ. Java Basics - Anfänger-Themen 3
H TicTacToe-geeignete Klassenhierarchie Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben