我正在使用界面:
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;
}
}
对于我可能做错的任何想法?它与字段的范围有关吗?
答案 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
没有xcor
和ycor
成员,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.