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.