0

我试图了解两种具有相同名称的方法之间的区别。这是我试图理解的代码......

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));
}

有人可以解释这两种方法之间的区别distance()。类型MyPoint实际上是什么意思?为什么其中一个方法有一个MyPoint对象,而另一个方法有两个MyPoint对象?

4

4 回答 4

2

MyPoint是对象的类型。例如,在该distance(MyPoint p1, MyPoint p2)方法中,这意味着您将 2 个对象传递给此方法 - 第一个对象是MyPoint名为 p1 的对象,第二个对象是另一个MyPoint名为 p2 的对象。

2 个 println 语句之间的区别在于,第一个运行distance(MyPoint)方法,第二个运行distance(MyPoint, MyPoint)方法。此外,第一个方法运行distance()MyPoint p1对象到传递给方法的对象(p2),而第二个distance()方法是静态调用,它计算MyPoint传递给方法(p1p2)的两个对象之间的距离。

于 2012-04-08T08:14:29.390 回答
0

不同之处在于您的计算方式。第一个通过实例的状态完成,第二个通过“静态”方式完成。

你可能想看看真正的用法。如果它类似于实用程序,则将其设为静态更有意义。

于 2012-04-08T08:14:40.513 回答
0

distance 是用于计算作为输入给定的两点之间的距离的方法。

MyPoint 类描述了空间中的点。此类中的 now 方法 distance(Mypoint x) 为您提供该点与作为参数传递的参考点的距离,而静态方法仅返回传递的两点之间的距离

于 2012-04-08T08:18:04.850 回答
0

也许您的问题与静态方法有关?

p1.distance(p2)

这调用了 MyPoint 的成员函数,但是这个调用来自 MyPoint p1 的特定实例

MyPoint.distance(p1, p2)

调用 MyPoint 的静态方法,不需要任何实例,但必须添加 MyPoint。告诉编译器您正在引用静态方法或字段。

于 2012-04-08T08:21:05.533 回答