Здравствуйте, мне нужна помощь в следующем задании домашней работы, которое у меня есть.Интерфейс и наследование java
Это только часть проблемы, но мне нужна помощь только с этой частью.
Я хочу создать небольшую систему, которая имитирует Олимпийские игры. Есть три вида спорта, которые я хочу имитировать, плавать, ездить на велосипеде и бегать. Есть четыре типа спортсменов, которые я хочу использовать, пловцы, велосипедисты, спринтеры (которые могут соревноваться в плавании, езде на велосипеде и бег соответственно) и superAthletes, которые могут соревноваться во всех трех играх (у меня с большинством проблем) , У каждого спортсмена должен быть метод compete(), который будет произвольно генерировать время от 10 до 20 секунд для бега, от 100 до 200 секунд для плавания и от 500 до 800 секунд для езды на велосипеде, это время будет использовано для отвлечения победителя за игру.
Мой вопрос заключается в том, как имитировать эту проблему, какие классы использовать, и каковы будут их отношения. Мне нужен способ создания разных игровых объектов, таких как SwimGame, в которых есть список только для плавания и супер спортсмена.
Это мой подход.
Итак, у меня будет базовый абстрактный класс спортсмена, а велосипедист, бегун-пловец и суперастлет, выйдут из этого класса.
У меня также будет класс абстрактных игр, и здесь будут расширяться игры SwimGame, CycleGame и RunningGame. В каждой игре будет список спортсменов, которые участвуют в игре.
Как я смогу предотвратить бегун добавить плавать игру, и подобные ситуации
как будет Выражаю Рассчитайте время, когда superAthleat может участвовать во всех 3 играх
На Сначала я думал, что я делаю 3 интерфейса:
interface swimInterface() {
public void calculateSwimTime();
}
interface runInterface() {
public void calculateRunTime();
}
interface cycleInterface() {
public void calculateCycleTime();
}
, а затем сделать swimmerAthleate реализовать swimInterface, то runAthlete реализации г unInterface, cycleAthlete реализовать cycleInterface, а самое главное superAthlete реализует runInterface, swimmerInterface и cycleInterface, так что я бы что-то вроде этого:
public abstract class Athlete {
...
// what should be here
}
public class SwimAthlete extends Athlete implements SwimInterface {
...
public void calculateSwimTime() {...}
}
public class RunAthlete extends Athlete implements RunInterface {
...
public void calculateRunTime() {...}
}
public class CylcleAthlete extends Athlete implements CycleInterface {
...
public void calculateCycleTime() {...}
}
public class SuperAthlete extends Athlete implements SwimInterface, CycleInterface, RunInterface() {
public void calculateSwimTime() {...}
public void calculateRunTime() {...}
public void calculateCycleTime() {...}
}
Но у меня есть много других проблем: Если у меня есть что-то вроде этого:
public class Game {
ArrayList<Athlete> listOfCompetitors;
public Game(){
listOfCompetitors = new ArrayList<Athlete>();
}
}
public class SwimGame extends Game {
// I could have something like this here
// how could I add only SwimAthlete and SuperAthlete here
// how to traverse the array of athletes and only call calculateSwimTime method.
}
// similar for other games.
Если вам нужно больше объяснений, я более чем готов обсудить этот вопрос.
Вопрос: Рассматривали ли вы добавление класса «Событие», что «имеет» игру и атеатр? И может также запретить «пловец» спортсменов участвовать в «Бегущих» играх? – FoggyDay
Когда вы вызываете 'compete()', как вы узнаете, какое событие участвует в соревнованиях? Было бы лучше иметь отдельный интерфейс для каждого события, каждый со своим собственным методом ('swim()', 'run()' и т. Д.), А затем каждый тип спортсмена реализует интерфейсы для любых типов событий разрешено конкурировать. – azurefrog
Хорошо, я использовал этот подход, но тогда у меня есть проблема, как вызывать эти методы из разных игр. Я обновлю свой вопрос, чтобы отразить эту ситуацию. – aleksamarkoni