Java интерфейсы и объекты - PullRequest
2 голосов
/ 10 марта 2020

Здесь я пытаюсь использовать интерфейс под названием «Измеримый» с одним методом, называемым 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();
}
public class Person {
    private String name;
    private Integer height;



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


    public double getMeasure() {
        return height;
    }
}

Ответы [ 2 ]

4 голосов
/ 10 марта 2020

Класс Person должен реализовывать Measurable:

public class Person implements Measurable {
    ...
}

Затем, если вы хотите, чтобы ваша average функция использовалась повторно (я полагаю, это ваш желаемый результат), вы должны заменить Person экземпляр с Measurable:

public static double average(Measurable[] objects) {
    ...
    for (Measurable obj : objects){
        ...
    }
}

Таким образом, вы можете иметь различные реализации Measurable для вычисления среднего.

0 голосов
/ 10 марта 2020
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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...