2017-03-13 1 views
0

Ich nehme diese ersten Schritte von Python nach Java und hier ist meine erste von vielen Java-Fragen Zweifel.Java Drucken von geerbten Objekten mit einer println Methode

Wenn ich über eine verkürzte Druckmethode drucke, stoße ich auf ein Problem mit dem Rückgabewert einer geerbten Klasse. Ich bin sicher, es ist etwas Einfaches über Java, das ich noch nicht verstehe. Ich versuche auch, alle Ganzzahlen, die die println-Methode empfängt, in einen String mit .tostring() umzuwandeln, aber ich bin mir nicht sicher, ob das korrekt ist.

class Inheritance { 

    private static void println (Object line){ 
     System.out.println(line.toString()); 
    } 

    static class A { 
     public int multiply(int a, int b){ 
      int val = a*b; 
      return val; 
     } 
    } 

    static class B extends A { 
     public int multiply(int a, int b) { 
      int val = a * b * 5;   
      return val; 
     } 
    } 

    public static void main(String[] args) { 
     B b_class = new B(); 
     b_class.multiply(3,4); 

     println(b_class); 
     println("Hello World"); 

    } 
} 

Der Ausgang ist wie folgt:

[email protected] 
Hello World 
+0

Probieren Sie 'println (b_class.multiply (3,4))' –

+0

Das hätte in Python genauso funktioniert. Sie haben mit dem Rückgabewert "multiply" nichts gemacht. – user2357112

Antwort

1

Sie können einfach die Methode innerhalb println

public static void main(String[] args) { 
     B b_class = new B(); 

     println(Integer.ToString(b_class.multiply(3,4))); 
     println("Hello World"); 

    } 
1

Für JavatoString Verfahren es standardmäßig

einen String zurückgibt den Namen der Klasse, bestehend aus dem das Objekt eine Instanz, das At-Zeichen-Zeichen "@" und die vorzeichenlose hexadezimale Darstellung des Hash-Codes des Objekts. Mit anderen Worten, gibt diese Methode einen String gleich den Wert von:

getClass().getName() + '@' + Integer.toHexString(hashCode())

https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#toString()

so, wenn Sie b_class println wird es drucken: [email protected].

Für Ihre println (Object line) es empfangen Referenztyp (Object) println, sondern als multiply Methode ist es Rückkehr ein Urtyp (int), es ist kein Objekt, müssen Sie es auf ein Objekt konvertieren für println Methode, wie @ Stanteys Antwort, verwenden Integer.toString kann int zu String konvertieren.

What's the difference between primitive and reference types?

1

Wenn Sie println(b_class); implizit ausführen nennt es toString Methode der gleichen Klasse, die von Object Klasse vererbt wird.

Sie müssen die Methode überschreiben, um die korrekte Ausgabe anzuzeigen.

static class B extends A { 
    int val=0; 
    public int multiply(int a, int b) { 
     val = a * b * 5;   
     return val; 
    } 
    public String toString(){ 
    return String.valueOf(val); 
    } 
} 

Jetzt wird println(b_class); arbeiten nach Ihren Erwartungen.

Verwandte Themen