2012-04-08 86 views
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)); 
} 

可能有人请解释2种distance()方法之间的差异。 MyPoint实际上是什么意思?为什么1个方法有一个MyPoint对象,而另一个方法有2个MyPoint对象?

回答

2

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

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

+0

尴尬的问,但为什么在参数中可以包含类名,但不是像S​​tring或int类型? – 2012-04-08 08:29:56

+0

它也可以包含。如果它的东西像一个int或一个布尔值,它指的是原始类型的数据,如简单数字或真/假。如果它像String,MyPoint或任何其他类名一样,则表示它是一种对象类型,它可能比简单的原始数据类型更复杂 – wattostudios 2012-04-08 08:45:29

+0

我知道我误解的地方。非常感谢你。 – 2012-04-08 09:04:31

0

区别在于你的计算方式。首先由实例的状态执行,然后以“静态”方式执行第二个状态。

你可能想看看真正的用法。如果它像实用程序一样,将它变为静态更有意义。

0

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

Class MyPoint描述了空间中的点。现在在这个类方法的距离(Mypoint X)为您提供了从作为参数传递的参考点这个点的距离,而静态方法简单的返回两个点之间的距离,通过

0

也许你的问题是关于静态方法?

p1.distance(p2) 

这叫MyPoint的成员函数,这个呼叫来自MyPoint P1的特定实例 然而

MyPoint.distance(p1, p2) 

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