Java 为什么我会收到一个“a”;找不到符号“;编译此接口方法时出错?

Java 为什么我会收到一个“a”;找不到符号“;编译此接口方法时出错?,java,interface,Java,Interface,我正在使用界面位置: public interface Place { int distance(Place other); } 但当我尝试实现接口并编译以下代码时,返回“找不到符号-变量xcor”错误 public class Point implements Place { private double xcor, ycor; public Point (double myX, double myY) { xcor = myX;

我正在使用界面位置:

public interface Place
{
    int distance(Place other);
}
但当我尝试实现接口并编译以下代码时,返回“找不到符号-变量xcor”错误

public class Point implements Place
{
    private double xcor, ycor;

    public Point (double myX, double myY)
    {
        xcor = myX;
        ycor = myY;
    }

    public int distance(Place other)
    {
        double a = Math.sqrt( (other.xcor - xcor) * (other.xcor - xcor) + (other.ycor - ycor) * (other.ycor -ycor) ) + 0.5;
        return (int)a;
    }

}

你知道我做错了什么吗?它是否与字段的范围有关

接口
Place
没有成员
xcor
。向接口添加一个方法
double getXcor()
,并在类中实现它。这同样适用于
ycor
。然后,您可以在
distance
方法的实现中使用这些getter

public interface Place
{
    int distance(Place other);
    double getXcor();
    double getYcor();
}

位置
没有
xcor
ycor
成员,
有。

距离方法的参数是
位置
,而不是
。只有
类有一个名为
xcor

的字段,这是因为Place接口不公开名为“xcor”的符号。它只公开了“距离”方法。因此,当您有一个Place类型的变量时,编译器不知道它是哪种底层类型。您要么让Place为xcor/ycor等公开一个getter,要么将“Place”实例向下转换为“Point”。当您有多个Place实现时,通常不赞成向下转换,但这是一个通常的问题,即使用一个接口覆盖具有不同底层属性的实现。就像有一个带有“area()”的“Shape”,其中矩形和圆形的实现使用了不同的面积计算方法。

之前的几张海报提到了这个问题,即距离被赋予了一个没有xcor的位置。我将进一步指出,这是一个泛型的地方。定义任意位置之间的距离函数可能没有意义。(如果是这样,那么xcor和ycor就可以被拉入一个介于Place和Point之间的抽象类中。)

公共接口场所{
int距离(其他位置);
}
类点实现地点等。
public interface Place<T> {
   int distance (Place<T> other);
}

class Point implements Place<Point> etc.