编译此接口方法时,为什么会收到“无法找到符号”错误?

时间:2011-09-28 23:13:23

标签: 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;
        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;
    }

}

对于我可能做错的任何想法?它与字段的范围有关吗?

5 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

这是因为Place接口不会公开名为'xcor'的符号。它只暴露方法'距离'。所以当你有一个类型为Place的变量时,编译器不知道它是哪个底层类型。您要么让Place公开xcor / ycor等的getter,要么将'Place'的实例向下转换为'Point'。当你有多个Place的实现时,向下转换通常是不受欢迎的,但这是通常的问题,即具有覆盖具有不同底层属性的实现的接口。就像有一个'Shape',它具有'area()',使用不同的计算区域方法实现Rectangle和Circle。

答案 2 :(得分:0)

Place没有xcorycor成员,Point会员。

答案 3 :(得分:0)

distance方法的参数是Place,而不是Point。只有Point类有一个名为xcor的字段。

答案 4 :(得分:0)

之前的一些海报提到了这个问题,即distance被赋予了一个没有xcor的地方。我会更进一步,并建议这是一个泛型的地方。在任意位置之间定义距离函数可能没有意义。 (如果确实如此,则可以将xcor和ycor拉到Place和Point之间的抽象类中。)

public interface Place<T> {
   int distance (Place<T> other);
}

class Point implements Place<Point> etc.