2012-04-08 1 views
0

Ich versuche den Unterschied zwischen 2 Methoden zu verstehen, die den gleichen Namen haben. Dies ist der Code, den ich zu verstehen versuchen ...Was bedeutet ein Objektvariablentyp?

public class Test { 
    public static void main(String[] args) { 
     MyPoint p1 = new MyPoint(); 
     MyPoint p2 = new MyPoint(10, 30.5); 
     System.out.println(p1.distance(p2)); 
     System.out.println(MyPoint.distance(p1, p2)); 
    } 
} 

class MyPoint { 
    ..... 
} 

public double distance(MyPoint secondPoint) { 
    return distance(this, secondPoint); 
} 

public static double distance(MyPoint p1, MyPoint p2) { 
    return Math.sqrt((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y)); 
} 

Könnte jemand bitte den Unterschied zwischen den 2 distance() Methoden erklären. Was bedeutet der Typ MyPoint eigentlich? Warum hat 1 der Methoden ein einzelnes MyPoint Objekt, während die andere Methode 2 MyPoint Objekte hat?

Antwort

2

MyPoint ist die Art des Objekts. In der Methode distance(MyPoint p1, MyPoint p2) zum Beispiel bedeutet dies, dass Sie 2 Objekte an diese Methode übergeben - das erste Objekt ist ein MyPoint Objekt namens p1 und das zweite Objekt ist ein weiteres MyPoint Objekt namens p2.

Der Unterschied zwischen den beiden println-Anweisungen besteht darin, dass die erste die distance(MyPoint)-Methode ausführt und die zweite die distance(MyPoint, MyPoint)-Methode. Zusätzlich führt die erste Methode das distance() vom MyPoint p1 Objekt zu demjenigen, das dem Verfahren übergeben wurde (p2), während das zweite distance() Verfahren ein statischer Aufruf ist, der den Abstand zwischen den 2 MyPoint Objekten berechnet, die an die Methode übergeben werden (p1 und p2).

+0

Peinlich zu fragen, aber warum in dem Parameter kann es den Klassennamen aber nicht den Typ wie String oder int enthalten? –

+0

Es kann entweder enthalten. Wenn es so etwas wie ein int oder ein boolescher Wert ist, bezieht sich das auf einen primitiven Datentyp, wie einfache Zahlen oder wahr/falsch. Wenn es etwas wie ein String, ein MyPoint oder ein anderer Klassenname ist, bedeutet es, dass es sich um einen Objekttyp handelt, der komplexer sein kann als ein einfacher primitiver Datentyp – wattostudios

+0

Ich weiß, wo ich falsch verstanden habe. Vielen Dank. –

0

Der Unterschied liegt in der Art, wie Sie rechnen. Das erste geschieht durch den Zustand der Instanz und das zweite durch "statische" Art.

Vielleicht möchten Sie sich die tatsächliche Nutzung ansehen. Wenn es wie ein Dienstprogramm ist, macht es mehr Sinn, es statisch zu machen.

0

Abstand ist die Methode, mit der der Abstand zwischen zwei als Eingabe angegebenen Punkten berechnet wird.

Die Klasse MyPoint zeigt einen Punkt im Raum an. Der Methodenabstand (Mypoint x) in dieser Klasse gibt den Abstand dieses Punktes vom als Parameter übergebenen Referenzpunkt an, während die statische Methode einfach den Abstand zwischen zwei Punkten zurückgibt

0

Vielleicht liegt Ihr Problem an den statischen Methoden?

p1.distance(p2) 

Dies ruft eine Elementfunktion MyPoint, dieser Anruf von einer bestimmten Instanz MyPoint p1 ist jedoch

MyPoint.distance(p1, p2) 

ruft eine statische Methode von MyPoint, die keine Instanz braucht, aber Sie müssen MyPoint hinzufügen. Um dem Compiler mitzuteilen, dass Sie auf eine statische Methode oder ein statisches Feld verweisen.