Double, int, Berechnung

sabijava

Mitglied
Hallo, ich habe folgende Klassen:

Java:
c l a s s A {

p r i v a t e  i n t a = 1 ;

p u bl i c     i n t     f o o ( i n t i ) {

r e t u r n      

a + i * g e t V a l u e ( ) ;

}

p u b l i c    i n t       g e t V a l u e ( ) {

r e t u r n      a ;

}

}

c l a s s    B    e x t e n d s     A {

p r i v a t e    i n t.   b = 2 ;

p u b l i c     i n t     f o o ( d o u b l e d ) {

r e t u r n

 ( i n t ) ( b * d ) ;

}

p u b l i c    i n t    g e t V a l u e ( ) {

r e t u r n    b ;

}

}

Außerdem

Java:
p u b l i c    s t a t i c    v o i d    m a i n ( S t r i n g [ ] a r g s ) {

A  a = n e w  A ( ) ;

B  b = n e w  B ( ) ;

A  a b = b ;

Wenn ich jetzt i n t v 6 = b . f o o ( 1 0 ) ; aufrufe soll 21 rauskommen. Kann mir jemand erklären, Warum nicht 20 rauskommt?
Danke schonmal 🙂
 
Du musst beim aufrufen der "Foo" Methode auch eine Double an diese übergeben, denn sonst rufst du ja die "Foo" Methode aus der Elternklasse A auf und diese rechnet noch eins dazu. Es müsste dann so aussehen:

Java:
 int v6 = b.foo(10.0);

Dann geht es auch und du hast keine Probleme mehr. 😀
Hoffe du kommst weiter.
Daviddiviad
 
Das heißt, da ich ein int 10 übergeben habe, wird foo euere Oberklasse aufgerufen. Wird dann aber getValue der Oberklasse oder getValue der Unterklasse aufgerufen? Wenn es get value der Oberklasse wär, müsste dort ja rauskommen 1+1*10 also 11. warum wird aber getValue der Klasse B aufgerufen?

Vielen, vielen Dank 🙂
 
Jetzt habe ich erst dein wirkliches Problem verstanden 😀
Dadurch das B Klasse A erweitert wird, wenn du getValue() in der "Foo" Methode aufrufst, die getValue() in B aufgerufen. dadurch erhälst du 2 und am Ende die Rechnung:

a + i * getValue()
= 1 + 10 * 2
= 21

Und da hast du deinen Fehler und diesen kannst du viel einfacher Lösen. Woran das genau liegt kann ich dir auch nicht sagen. Das hat Java halt so an sich. Nenn die Methoden doch einfach in getValueA() und getValueB() um.
Hoffe ich konnte dir helfen.
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben