2016-10-16 1 views
1

Was wird die Ausgabe des folgenden Codes sein? Der Ausgang wird 1.0 sein, aber dies bedeutet, dass double Parameter anstelle von Floating-Parameter bevorzugt wird. Bitte jemand erklären, was ist der Mechanismus hinter dieser Ausgabe.Methode überladen mit schwebenden Typen

class X 
    { 

    int method(int i) 
    { 

     return i *= i; 
    } 
} 

class Y extends X 
{ 
    double method(double d) 
    { 
     return d /= d;  
    } 
} 
class Z extends Y 
{ 
    float method(float f) 
    { 
     return f += f; 
    } 
} 

public class MainClass 
{ 
    public static void main(String[] args) 
    { 
     Z z = new Z(); 

     System.out.println(z.method(21.12)); 
    } 
} 

Antwort

0

Da standardmäßig die Dezimalzahl Typ double in Java ist so an dieser Stelle

System.out.println(z.method(21.12)); 

java Gonna 21.12 Werte betrachten ist ein double nicht float daher Java-Look-Up-Tabelle versuchen, die besten zu finden Match mit double Wert

der Schwimmer Literale als entweder mit f markiert oder F so Funktion aufrufen, mit Gleitkommawerten tun dies

System.out.println(z.method(21.12f)); 
0

Ihr Literal 21.12 wird von der Laufzeit als Double behandelt. Sie könnten versuchen, "21.12F" explizit in einen Float zu verwandeln.

3

21.12 ist ein double Literal, weshalb double method(double d) gewählt wird. Für float Literale müssen Sie 21.12f oder 21.12F verwenden. z.method(21.12f) würde float method(float f) aufrufen.

0

standardmäßig eine Gleitkomma wörtliche wie 21.12 interpretiert wird als Doppel vom Compiler (Sie müßten 21.12f verwenden, um es einen Schwimmer zu machen).

Zur Kompilierungszeit sucht der Compiler also nach der Methode, die der am nächsten kommt; in diesem Fall das Doppelte von deiner Basisklasse.

Verwandte Themen