Java接口和对象

Java接口和对象,java,oop,interface,Java,Oop,Interface,在这里,我尝试使用一个名为“可测量”的接口和一个名为getMeasure的方法。问题是,我试图通过访问界面中的方法来获得程序中所有人的平均身高。其中一个问题是,由于某种原因,我无法访问getMeasure方法,最终无法获得数组中所有人的平均身高。我怎样才能解决这个问题 class Main { public static void main(String args[]) { Person[] people = new Person[4]; people[0

在这里,我尝试使用一个名为“可测量”的接口和一个名为getMeasure的方法。问题是,我试图通过访问界面中的方法来获得程序中所有人的平均身高。其中一个问题是,由于某种原因,我无法访问getMeasure方法,最终无法获得数组中所有人的平均身高。我怎样才能解决这个问题

class Main {
    public static void main(String args[]) {
        Person[] people = new Person[4];
        people[0] = new Person("Larry", 65);
        people[1] = new Person("Susan", 45);
        people[2] = new Person("Joe", -45);
        people[3] = new Person("", 0);
        double averageHeight = average(people);
    }

    public static double average(Person[] objects)
    {
        if (objects.length == 0) { return 0; }
        double sum = 0;
        for (Person obj : objects)
        {
            double measure = obj.getMeasure();
            sum = sum + measure;
        }
        double result = sum / objects.length;
        return result;
    }
}



interface Measurable {
    double getMeasure();
}

Person
类应实现
可测量的

public class Person implements Measurable {
    ...
}
public static double average(Measurable[] objects) {
    ...
    for (Measurable obj : objects){
        ...
    }
}
然后,如果您想使您的
average
函数可重用(我想这是您想要的结果),您应该将
Person
实例替换为
measured

public class Person implements Measurable {
    ...
}
public static double average(Measurable[] objects) {
    ...
    for (Measurable obj : objects){
        ...
    }
}
这样,您就可以使用不同的
可测量的
实现来计算平均值

public class Person implements Measurable {
private String name;
private Integer height;



public Person(String name, Integer height)
{
    this.name = name;
    this.height = height;
}

@Override
public double getMeasure() {
    return height;
}

要使用它,您必须实现。如果接口也实现了该方法,则必须添加@Override修饰符。

Person
没有实现
接口
。。。使其声明
公共类Person实现可测量的{…}
您的代码应该“按原样”工作,尽管您根本没有使用
可测量的
接口。请张贴您得到的确切错误!只调用与接口函数同名的函数并不意味着重写它。正如Alex所解释的,您必须实现该接口才能覆盖其方法。如果OP未实现该接口,则不会使用该接口,但这并不能真正回答以下问题:“我无法访问getMeasure方法的问题之一”我试图实现接口并使用getMeasuremethod@UMLtotallydistilled我的答案是你想用的吗在这里尝试猜测思维:)在这种情况下,
@Override
注释不是必需的。只要类
实现接口
它就可以在没有它的情况下工作。虽然它不会以另一种方式工作-如果你有
@Override
,但没有实现接口,你会得到一个编译错误。因此我提到,只有当接口也实现了@alexomai方法时,这才是必要的