在不同数据类型的数组中使用接口方法处理一种数据类型的对象? Java的

时间:2014-11-13 01:23:44

标签: java arrays inheritance interface

所以我的问题是我有一个名为GeometricFigure2的类,其中包含widthheight等字段。我有一个名为SidedObject的界面,它包含一个显示数字有多少边的方法

public interface SidedObject
{
    public void displaySides();
}

我有两个名为Square2Triangle2的子类,它们扩展GeometricFigure2并实现SidedObject。这两个类都包含displaySides()方法,如下所示:

public void displaySides()
{
   System.out.println("The square has 4 sides.");
}

最后,我有一个名为UseGeometricFigure2的类,它使用两个子类。我创建了一个类型为GeometricFigure2的数组,用于存放两个Square2个对象和两个Triangle2个对象:

GeometricFigure2[] geoRef = new GeometricFigure2[4];
    geoRef[0] = new Square2();
    geoRef[1] = new Square2();
    geoRef[2] = new Triangle2();
    geoRef[3] = new Triangle2();
然后我创建一个for循环来迭代数组并为数组中的每个对象调用displaySides()方法:

for(int i=0; i<4; i++)
{
    geoRef[i].displaySides();
}

问题是当我尝试编译它时给了我一个“找不到符号”的错误。它正在查找displaySides()类中的GeometricFigure2,它是数组类型。如何在此设置中正确调用displaySides()方法?

2 个答案:

答案 0 :(得分:1)

您有三种选择:

  1. GeometricFigure2实施您的SidedObject界面。
  2. 将您的数组声明为SidedObject[]类型,而不是GeometricFigure2[]
  3. 将数组变量转换为SidedObject
    ((SidedObject) geoRef[i]).displaySides();

答案 1 :(得分:0)

对于来自displaySides()的{​​{1}}方法来处理SideObject的实例,您需要修改GeometricFigure2以实施GeometricFigure2