2016-04-20 2 views
1

У меня есть курсовая работа для моего университетского проекта, и я борюсь с концепцией абстрактных классов. Я понимаю причину их создания, создания подклассов, и я понимаю простые примеры абстрактных классов. Вопрос заключается в том, чтобы просить конкретный класс Selector, который реализует абстрактные методы.Реализация абстрактных методов в конкретном классе

Создать абстрактный базовый класс, ASelector, с двумя абстрактными методами под названием selectorRange и selectorValue следующим образом:

  1. метод selectorRange требует двух параметров, определяющих целое диапазон возможных значений от минимального до максимального значения (включительно) со следующей подписью публичный аннотация void selectorRange (int min, int max);

  2. метод selectorValue возвращает случайное сгенерированное значение в диапазоне от min до max (включительно) и имеет следующую подпись: public abstract int selectorValue();

Создать конкретный класс, селектор, который реализует ASelector с соответствующим кодом для реализации обоих методов.

До сих пор у меня есть:

public class Selector extends ASelector { 

@Override 
    public void selectorRange(int min, int max) { 
     min = 1; 
     max = 10; 
    } 

    @Override 
    public int selectorValue(int min, int max) { 

     Random r = new Random(); 
     int randomNumber = r.nextInt(max - min) + min; 

     return randomNumber; 

    } 
} 

Но ошибка я получаю с селектором в заголовке метода. В нем говорится, что я не реализовал абстрактные методы, но у меня есть? Или я думаю, что у меня есть. Любая помощь будет оценена по достоинству.

Мой ASelector класс:

public abstract class ASelector { 

    public abstract void selectorRange(int min, int max); 
    public abstract int selectorValue(); 
} 
+1

Это не влияет на проблему, которую вы описываете, но 'min = 1; max = 10; 'просто перезаписывает значения параметров в' selectorRange'; это не имеет никакого полезного эффекта. –

+1

Пожалуйста, покажите свой класс 'ASelector'. –

+0

'public abstract int selectorValue()' в spec не совпадает с 'public int selectorValue (int min, int max) {' в вашем коде. –

ответ

1

В вашем селекторе класса вы должны хранить максимум и мин номер

 int max; 
    int min; 

Тогда ваш код selectorValue должен выглядеть следующим образом:

 public int selectorValue(){ 
      Random r = new Random(); 
      int randomNumber = r.nextInt(this.max - this.min) + min; 
      return randomNumber; 
     } 

Что происходит, так это то, что java позволяет перегружать методы, это означает, что вы можете создавать методы с тем же именем и различные входные атрибуты, и они будут разными. Это означает, что public int selectorValue() отличается от public int selectorValue(int min, int max), поэтому метод не реализован.

В результате хранения макс и мин в селекторе ваш selectorRange должно быть так:

public void selectorRange(int min, int max) { 
     this.min = min; 
     this.max = max; 
    } 

Это установит ваши внутренние минимальные и максимальные переменные значения параметров мин и макс

+0

В соответствии с тем, что вы описали, он просто действует как сеттер. – Nevado

+0

Ahhhh, я понял. Большое спасибо. –

+0

You re wellcome :) – Nevado

0

вопрос заключается в том, что ASelector определяет

public abstract int selectorValue(); 

Но вы реализуете

public abstract int selectorValue(int min, int max); 
Смежные вопросы