Kann mir jemand das erklären?

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
class Start {
A a = new C();
B b = new C();
a.test(a);
a.test(b);
b.test(a);
b.test(b);
}

class A{
public void test(){
System.out.println("A");
}
}

class B extends A{
public void test(){
System.out.println("B");
}
}

class C extends B{
public void test(){
System.out.println("C");
}
}

wieso kommt nach dem Start
A
A
A
B
heraus ?
hier handelt es sich doch um overloading !
 
S

SlaterB

Gast
dein Code ist syntaktisch nicht korrekt,
bei
Code:
public class Start
{
    public Start()
    {
        A a = new C();
        B b = new C();
        a.test();
        a.test();
        b.test();
        b.test();
    }

    public static void main(String[] args)
    {
        new Start();
    }
}


class A
{
    public void test()
    {
        System.out.println("A");
    }
}


class B
    extends A
{
    public void test()
    {
        System.out.println("B");
    }
}


class C
    extends B
{
    public void test()
    {
        System.out.println("C");
    }
}
kommt bei mir
C
C
C
C
raus
 

TheRealDeal

Neues Mitglied
public class Start
{
public Start()
{
A a = new C();
B b = new C();
a.test(a);//NEU
a.test(b);//NEU
b.test(a);//NEU
b.test(b);//NEU
}

public static void main(String[] args)
{
new Start();
}
}


class A
{
public void test(A a)
{
System.out.println("A");
}
}


class B
extends A
{
public void test(B b)
{
System.out.println("B");
}
}


class C
extends B
{
public void test(C c)
{
System.out.println("C");
}
}

sorry, so ist richtig. alles neue
 

Marco13

Top Contributor
In der Klasse C gibt es dann 3 Methoden, die alle "test" heißen, sich aber nur durch den Parameter unterscheiden (eben Overloading, und keine Polymorphie).

Wenn man c.test(a); aufruft, wird test(A a) { ... } aufgerufen.
Wenn man c.test(b); aufruft, wird test(B b) { ... } aufgerufen.
Wenn man c.test(c); aufruft, wird test(C c) { ... } aufgerufen.

Es wird immer versucht, die Methode aufzurufen, die "am besten zum Parameter passt".

Code:
class X
{
    public void test(Object a) {...}
    public void test(String a) {...}
}

x.test(new JButton()); // ruft   test(Object a)   auf
x.test(new String()); // ruft   test(String a)   auf (obwohl "eigentlich" auch  test(Object a) aufgerufen werden könnte)

Wenn du die Methoden in den Klassen B und C jeweils als
public void test(A a) { ... }
deklariert hättest, dann würde wirklich die EINE Methode überschrieben werden, die ursprünglich in A deklariert war (d.h. die Ausgabe wäre dann C C C C)
 
S

SlaterB

Gast
welche Operation gewäht wird (welche Signatur), steht schon zur Kompilierzeit fest,
für das a-Objekt steht eh nur eine Operatin zur Verfügen,
da nieman test(A) überschreibt, bleibt es auch diese Operation,

für das b-Objekt sind zwei Operationen bekannt, jede wird einmal gewählt

-------

Operationsaufrufe werden an eine bestimmte Operation gebunden,
das ist der Knackpunkt
 
G

Guest

Gast
ja danke, aber...........


A a = new C();
B b = new C();
a.test(a);//NEU
a.test(b);//NEU.--------<<< vom typ A , und typ A kennt keine methode mit para typ B. wieso also gibt er A aus ? die ist nur in B bekannt, es wird aber ein Typ b übergeben und nicht vom typ A, aber er gibt A aus. das verstehe ich ja nicht
b.test(a);//NEU
b.test(b);//NEU
 
S

SlaterB

Gast
zu dem Zeitpunkt, zu dem die Operation festgelegt wird,
steht nur die Operation von a zur Verfügung,
(es wird ja an einem A-Objekt aufgerufen)

diese Operation wird nun irgendwo gemerkt, steht fest als Code drin,
es wird nicht zur Laufzeit noch mal neu gesucht

also es wird schon ein bisschen gesucht, nämlich ob eine SubKlasse die feste Operation der Oberklasse überschrieben hat,

aber es wird nicht neu nach der besten Signatur gesucht
 
G

Guest

Gast
A a = new C();
..
..
a.test(b);

aber es bedeutet doch implizt dass die metode der klasse A aufgerufen wird, obwohl ein typ B übergeben wird !! und diese ÜBERLADENE methode steckt eigentlich in class B. die methode von class A kann er doch nur aufgerrufen werden,wenn der parameter vom typ A ist ! mit überschreiben verstehe ich das überall C rauskommt, aber genau diese eine zeile peil ich gar nicht ! a.test(b) ...und da kommt "A" raus. wiederspricht doch jeglicher logik, oder?
 
S

SlaterB

Gast
nu wirf doch nicht schon wieder Überladen und Überschreiben in einem Absatz ineinander

es ist so wie ich es sage,
zur Laufzeit wäre es zu teuer, nach überladenen Operationen für den übergebenen Parameter zu suchen,
diese Arbeit wird zur Kompilierzeit gemacht,

mehr kann man dazu nicht sagen,

kennst du final-Operationen?
mit
public void test(A a)
{
System.out.println("A");
}
könnte man sicherstellen, dass a.test(irgendwas) immer in Klasse A landet und nicht überschrieben werden kann,
sowas würde bei deiner Vorstellung ausgehebelt
 
G

Guest

Gast
öhm ja kenne ich.
nur wie du eben selbst geschrieben hast. in meinem beispiel ist ja kein überschreiben sondern überladen.

und was bedeutet, es wäre zu teuer ??? also heisst es, das es zwar nicht der eigentlich typ übergeben wird, aber dennoch die methode in A ausgeführt wird?
und heisst es auch weiter, dass zur laufzeit nur nach überschreiben geschaut wird ?
 
G

Guest

Gast
Anonymous hat gesagt.:
A a = new C();
..
..
a.test(b);

aber es bedeutet doch implizt dass die metode der klasse A aufgerufen wird, obwohl ein typ B übergeben wird !!
Richtig, es wird eine Methode der Klasse A aufgerufen, weil der statische Typ von a A ist. Und jetzt kommen wir zum Thema Polymorphie. Die Signatur der Methode lautet:

test(A)

Das bedeutet, dass Du alle Objekte übergeben kannst, die den Vertrag von A erfüllen. Das sind alle Objekte der Klasse A sowie alle Objekte von Klassen, die von A erben.

Du wunderst Dich doch auch nicht, dass Du der Methode println(Object) Exemplare von Deinen eigenen Klassen übergeben kannst, oder?

Code:
public class Bar
{
	public String toString()
	{
		return "hallo";
	}
	
	public static void main(String[] args)
	{
		Bar bar = new Bar();
		System.out.println(bar); // Bar erbt von Object
	}
}

public class PrintStream extends FilterOutputStream implements Appendable, Closeable
{
// ...
    public void println(Object x) {
        String s = String.valueOf(x);
        synchronized (this) {
            print(s);
            newLine();
        }
    }
// ...
}

die methode von class A kann er doch nur aufgerrufen werden,wenn der parameter vom typ A ist!
Nein. Vom Typ a oder von einem Subtyp von A.

Fred
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Kann mir jemand wörtlich erklären, was in dem Code genau passiert? Java Basics - Anfänger-Themen 1
F Kann mir jemand kurz dieses Programm erklären? Java Basics - Anfänger-Themen 22
M Könnte mir jemand diese Aufgabe erklären? Java Basics - Anfänger-Themen 2
M Kann mir jemand die Logik erklären? Java Basics - Anfänger-Themen 1
M Könnte mir jemand diese Aufgabe erklären? Java Basics - Anfänger-Themen 9
marcooooo Kann mir jemand das Beispiel kurz erklären so ungefähr:/ Java Basics - Anfänger-Themen 7
A Kann mir Jemand erklären wie ich das iteriere? Java Basics - Anfänger-Themen 4
A Kann mir jemand dieses Programm erklären? Java Basics - Anfänger-Themen 1
B Kann mir jemand diese Bedingung erklären Java Basics - Anfänger-Themen 5
B Kann mir jemand erklären, warum hier dreimal was ausgegeben wird und nicht nur zweimal? Java Basics - Anfänger-Themen 16
J TabelView - Kann mir jemand die Sequenz genau erklären ? Java Basics - Anfänger-Themen 2
J Kann mir bitte mal jemand diese Codes erklären? Java Basics - Anfänger-Themen 19
R kann mir jemand erklären was hier gemacht wurde? Java Basics - Anfänger-Themen 10
D Kann mir vielleicht jemand die reflexive Assoziation erklären? Java Basics - Anfänger-Themen 2
M Kann mir bitte jemand "java.util.ArrayList" erklären? Java Basics - Anfänger-Themen 5
M Kann mir jemand erklären, wie "static" funktionier Java Basics - Anfänger-Themen 2
F Kann mir jemand bei dem Fehler helfen? Java Basics - Anfänger-Themen 6
U Kann mir jemand helfen? Java Basics - Anfänger-Themen 2
N Ich kriege ganze zeit die Fehlermeldung "Inhalt der Zwischenablage kann nicht in die ausgewählten Elemente eingefügt werden" hat jemand eine Lösung? Java Basics - Anfänger-Themen 6
N Java Taschenrechner hat Jemand vlt einen Tipp dafür wie ich jetzt die buttons verbinden kann und das Ergebnis auf dem textfield anzeigen lassen kann Java Basics - Anfänger-Themen 13
C Kann mir jemand sagen warum public void unzulässig ist? Java Basics - Anfänger-Themen 2
C Kann mir jemand sagen warum ich nicht mal rechnen kann ? Java Basics - Anfänger-Themen 32
C Kann mir jemand helfen was mit diesen Fehlern gemeint ist ? Java Basics - Anfänger-Themen 12
M Kennt jemand die richtige Lösung? Java Basics - Anfänger-Themen 7
HeiTim Kann mir Jemand helfen ? Java Basics - Anfänger-Themen 11
H Versteht jemand diesen Codewars Error? Java Basics - Anfänger-Themen 8
M BerechneEtwas Weiss jemand woran es liegt Java Basics - Anfänger-Themen 8
M Kann mir jemand hier die Logik vermitteln? Java Basics - Anfänger-Themen 3
T Ich habe eine Variabel die nicht Methoden übergreifend ist. Kann mir jemand Helfen :) Java Basics - Anfänger-Themen 5
G Weiß jemand wie man dieses Programm schreibt? Java Basics - Anfänger-Themen 84
G Fehlersuche-kann mir jemand helfen? Java Basics - Anfänger-Themen 46
T Kann jemand kurz das Programm testen? Java Basics - Anfänger-Themen 13
T Aufgabe Flussdiagramm, kann jemand checken? Java Basics - Anfänger-Themen 8
J Hat jemand einen Lösungsansatz für diese Aufgabe? Java Basics - Anfänger-Themen 1
Y kann jemand die Terme mit Zahlen schreiben ?? Java Basics - Anfänger-Themen 4
R Kann mir hier jemand weiterhelfen? Java Basics - Anfänger-Themen 1
B Java -Turtle Grafik - kennt sich jemand damit aus? Java Basics - Anfänger-Themen 1
B Könnte jemand über dieses jurze Javaprogramm schauen? Irgendwas funktioniert mit der z-Varible nicht Java Basics - Anfänger-Themen 2
E Input/Output Kann jemand meinen Code durchschauen? Java Basics - Anfänger-Themen 4
T Kann mir jemand sagen, was bei folgender for-Schleife passiert? Java Basics - Anfänger-Themen 1
F Versteht das jemand? -Java Java Basics - Anfänger-Themen 6
K Könnte mir jemand erläutern, was der autor damit meint? Java Basics - Anfänger-Themen 5
A Hat jemand einen ratschlag, wie java beim replaceALL eine geschweifte klammer erkennt ? Java Basics - Anfänger-Themen 5
H Java Hamster - kann mir jemand weiterhelfen? Java Basics - Anfänger-Themen 4
V kennt jemand empfehlenswerte online tutorials zur Hibernate ? gerne auch englisch. Java Basics - Anfänger-Themen 4
R Kann jemand diese Java Programmierung machen? Versteh ich leider nicht Java Basics - Anfänger-Themen 17
R weiß jemand warum Java diesen Fehler ausspuckt? "Variable might not hav been initialized" Java Basics - Anfänger-Themen 4
I kann mir jemand weiterhelfen, wo liegen die Fehler? Java Basics - Anfänger-Themen 3
E Kann mir jemand sagen was hier falsch ist? Java Basics - Anfänger-Themen 6
gonzoradio Hat jemand Erfahrung mit javavideokurs.de Java Basics - Anfänger-Themen 5
C Hat jemand Ahnung zum GCJ(Gnu Compiler for Java) Java Basics - Anfänger-Themen 7
S Kann mir jemand kurz die Vorteile des Iterators erklaeren..? Java Basics - Anfänger-Themen 8
S Kennt jemand die Default-Cache Zeit beim Java-Plugin? Java Basics - Anfänger-Themen 2
B könnte nochmal jemand über mein Projekt schauen? Java Basics - Anfänger-Themen 4
S unschöne schleifen.jemand ne bessere idee Java Basics - Anfänger-Themen 4
K Kennt jemand ein gutes Tutorial für Wertübergabe? Java Basics - Anfänger-Themen 4
S Hat jemand eine Idee warum die JLabels nicht mehr farbig Java Basics - Anfänger-Themen 7
G Hoffe jemand kann mir ein paar Tips geben:binärer Suchbaum Java Basics - Anfänger-Themen 3
G Nutzt Jemand JCalendar? Java Basics - Anfänger-Themen 3
C Kann jemand mir helfen? Java Basics - Anfänger-Themen 15
N Kann mir bitte jemand helfen? Java Basics - Anfänger-Themen 6
W Java-Code erklären Java Basics - Anfänger-Themen 6
R Pseudocode erklären Java Basics - Anfänger-Themen 6
dieter000 Kurze Frage kann mir ejmand kurz diesen Code erklären, bzw wie man die zeilen erklärt und so Java Basics - Anfänger-Themen 1
B Modulo-Operator anhand eines Beispieles erklären Java Basics - Anfänger-Themen 7
marcooooo Code erklären Java Basics - Anfänger-Themen 28
marcooooo Code erklären Java Basics - Anfänger-Themen 4
Bluedaishi Hilfe beim erklären dieser Methode Java Basics - Anfänger-Themen 5
B Klassendiagramm erklären Java Basics - Anfänger-Themen 3
T Java Code erklären Java Basics - Anfänger-Themen 7
L Methode erklären Java Basics - Anfänger-Themen 4
L Methode erklären Java Basics - Anfänger-Themen 2
J String Problem kann das einer erklären Java Basics - Anfänger-Themen 13
S Programm verständlich erklären Java Basics - Anfänger-Themen 4
N Hilfe, Code erklären Java Basics - Anfänger-Themen 7
B Wie würdet ihr diese Methode erklären? Java Basics - Anfänger-Themen 2
T Java Code erklären Java Basics - Anfänger-Themen 5
D Einlesen funktioniert an einer Stelle nicht und ich kann mir nicht erklären warum Java Basics - Anfänger-Themen 6
M ImageObserver auf Deutsch erklären Java Basics - Anfänger-Themen 3
X Quelltext einen Tic Tac Toe Spiels erklären Java Basics - Anfänger-Themen 4
F Bitte mal Zusammenhänge der Klassen erklären Java Basics - Anfänger-Themen 8
O Rundungsfehler bitte erklären! Java Basics - Anfänger-Themen 4
X Array Ausgabe bei Verwendung von 2 Schleifen erklären Java Basics - Anfänger-Themen 8
C Input/Output Codezeile erklären Java Basics - Anfänger-Themen 5
S For-Schleifen erklären Java Basics - Anfänger-Themen 5
S catch Exception erklären Java Basics - Anfänger-Themen 2
V Wer kann diesen Code leicht erklären Java Basics - Anfänger-Themen 8
H Javacode erklären: Mittelpunkt bestimmen Java Basics - Anfänger-Themen 4
B Code erklären Java Basics - Anfänger-Themen 2
N Wer kann diese Zeile erklären? Java Basics - Anfänger-Themen 9
D Methode erklären Java Basics - Anfänger-Themen 4
D code erklären bitte ! Java Basics - Anfänger-Themen 15
Rudolf Verstehe das Ergebnis nicht - bitte erklären Java Basics - Anfänger-Themen 7
A Am Buch lesen, nun brauch ich eure Hilfe um mir super() zu erklären Java Basics - Anfänger-Themen 4
G Programm erklären -.- Java Basics - Anfänger-Themen 2
K Wer kann mir java.util.Hastable erklären. Java Basics - Anfänger-Themen 3
B Kann mir einer die Import Klassen erklären? Java Basics - Anfänger-Themen 8
I Einlesen von Dateien- wer kann mir den Code erklären ? Java Basics - Anfänger-Themen 4
S sql Klassen erklären Java Basics - Anfänger-Themen 3
P Schreibweise erklären- neu für mich Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben