Ваш второй код намного лучше, хотя все еще не хватает чего-то, вот код, о котором я говорю:
public class Sports
{
String sportType = "[Sport]";
List<Basketball> basketballs;
List<Baseball> baseballs;
public getTeamSize()
{
System.out.println("The size of the team is 10.");
}
public List<Basketball> getBasketballs
{
return this.basketballs;
}
public List<Baseball> getBaseballs
{
return this.baseballs;
}
}
Теперь обратите внимание, что спорт не делает ничего, кроме того, что содержит 2 спискакоторые содержат классы «баскетбол» и «бейсбол», представляющие команды.
Лучше было бы сказать, что баскетбол и бейсбол - это оба вида спорта, и я пытаюсь представлять спортивные команды (я нена самом деле не знаю, насколько всеобъемлющим вы хотите заниматься спортом, например: классифицируются ли виды спорта по определенному признаку? Например: эти виды спорта включают использование мяча или команду из 5 человек и т. д ... [Извините, я не большой в спорте]), эти спортивные команды имеют такие атрибуты:
public abstract class Sports {
private static List<Sports> teams = new ArrayList<>();
private int size;
private String teamName;
public Sports(String teamName) {
this.teamName = teamName;
teams.add(this);
}
public Sports(String teamName, int size) {
this.size = 0;
this.teamName = teamName;
teams.add(this);
}
public void setSize(int size) {
this.size = size;
}
public int getSize() {
return size;
}
public String getTeamName() {
return teamName;
}
public void printSports() {
Iterator<Sports> it = teams.iterator();
while(it.hasNext()) {
Sports tmp = it.next();
if(tmp instanceof Basketball) {
System.out.println(tmp.getTeamName());
}else if(tmp instanceof Baseball) {
System.out.println("Something else");
}
}
}
public abstract int getTeamSize();
public abstract void setTeamSize(int sizeOfTeam);
}
Баскетбольный класс:
public class Basketball extends Sports {
private int sizeOfTeam;
public Basketball(String teamName) {
super(teamName, 10);
//Defaults 10 players
}
@Override
public int getTeamSize() {
return sizeOfTeam;
}
@Override
public void setTeamSize(int sizeOfTeam) {
this.sizeOfTeam = sizeOfTeam;
}
}
Бейсбольный класс:
public class Baseball extends Sports {
private int sizeOfTeam;
public Baseball() {
super("team");
}
@Override
public int getTeamSize() {
return sizeOfTeam;
}
@Override
public void setTeamSize(int sizeOfTeam) {
this.sizeOfTeam = sizeOfTeam;
}
}
Я упростил это, хотя этогораздо лучше, вы можете определить любой атрибут, как вы хотите, и автоматически добавить его в список, который всегда будет там до конца программы.Вы можете сделать объект в другом классе (см. Ниже, я использовал драйвер), или просто добавить материал в список непосредственно в самом классе «Спорт», например, создать столько спортивных объектов, сколько вы хотите, и вы сами их содержали.Что касается бейсбола и баскетбола, я дал вам два примера классов, которые были упрощены, но в основном играют в игру абстрактного класса, что позволяет вам быть гибкими в том, как вы их определяете, жестким кодированием или нет.
Надеюсь, это поможет.
Драйвер:
public class Driver {
public static void main(String[] args) {
Sports sports = new Basketball("Team1");
sports = new Baseball();
sports.printSports();
}
}