반응형
abstract class (player) - basic class (Team)/Generics class - main
|
sub class 3개 (basketball player, soccer player..등)
해당player(basketball player)에 맞는 각 team class(basketball player team)만드는 대신
Team class 자체를 Generics class로 정의하여 각 team class 만들어야하는 거 방지.
Abstrac class- Player
package com.timbuchalka;
/**
* Created by dev on 17/10/2015.
*/
public abstract class Player {
private String name;
public Player(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
각 sub class 3개 - player
//baseball player class 1
package com.timbuchalka;
/**
* Created by dev on 17/10/2015.
*/
public class BaseballPlayer extends Player {
public BaseballPlayer(String name) {
super(name);
}
}
//football player class 2
package com.timbuchalka;
/**
* Created by dev on 17/10/2015.
*/
public class FootballPlayer extends Player {
public FootballPlayer(String name) {
super(name);
}
}
// soccer player class 3
package com.timbuchalka;
/**
* Created by dev on 17/10/2015.
*/
public class SoccerPlayer extends Player {
public SoccerPlayer(String name) {
super(name);
}
}
Basic class -Team / Generics class
package com.timbuchalka;
import java.util.ArrayList;
/**
* Created by dev on 17/10/2015.
*/
public class Team<T extends Player> {
private String name;
int played = 0;
int won = 0;
int lost = 0;
int tied = 0;
private ArrayList<T> members = new ArrayList<>();
public Team(String name) {
this.name = name;
}
public String getName() {
return name;
}
public boolean addPlayer(T player) {
if (members.contains(player)) {
System.out.println(player.getName() + " is already on this team");
return false;
} else {
members.add(player);
System.out.println(player.getName() + " picked for team " + this.name);
return true;
}
}
public int numPlayers() {
return this.members.size();
}
public void matchResult(Team<T> opponent, int ourScore, int theirScore) {
String message;
if(ourScore > theirScore) {
won++;
message = " beat ";
} else if(ourScore == theirScore) {
tied++;
message = " drew with ";
} else {
lost++;
message = " lost to ";
}
played++;
if(opponent != null) {
System.out.println(this.getName() + message + opponent.getName());
opponent.matchResult(null, theirScore, ourScore);
}
}
public int ranking() {
return (won * 2) + tied;
}
}
Main class / <T> 값 넣기
package com.timbuchalka;
public class Main {
public static void main(String[] args) {
FootballPlayer joe = new FootballPlayer("Joe");
BaseballPlayer pat = new BaseballPlayer("Pat");
SoccerPlayer beckham = new SoccerPlayer("Beckham");
Team<FootballPlayer> adelaideCrows = new Team<>("Adelaide Crows");
adelaideCrows.addPlayer(joe);
// adelaideCrows.addPlayer(pat);
// adelaideCrows.addPlayer(beckham);
System.out.println(adelaideCrows.numPlayers());
Team<BaseballPlayer> baseballTeam = new Team<>("Chicago Cubs");
baseballTeam.addPlayer(pat);
Team<SoccerPlayer> brokenTeam = new Team<>("this won't work");
brokenTeam.addPlayer(beckham);
Team<FootballPlayer> melbourne = new Team<>("Melbourne");
FootballPlayer banks = new FootballPlayer("Gordon");
melbourne.addPlayer(banks);
Team<FootballPlayer> hawthorn= new Team<>("Hawthorn");
Team<FootballPlayer> fremantle= new Team<>("Fremantle");
hawthorn.matchResult(fremantle, 1, 0);
hawthorn.matchResult(adelaideCrows, 3, 8);
adelaideCrows.matchResult(fremantle, 2, 1);
adelaideCrows.matchResult(baseballTeam, 1, 1);
}
}
참고) generics class- interface 연결
publi class Team<T extends Player & coach & manager> {
} //Player :First class // coach : interface // manager : interface
//Team class 에 각 팀의 ranking 비교하는 interface 넣기
package com.timbuchalka;
import java.util.ArrayList;
/**
* Created by dev on 17/10/2015.
*/
public class Team<T extends Player> implements Comparable<Team<T>> { //generics에 interface 추가
private String name; //<Team<T>>
int played = 0;
int won = 0;
int lost = 0;
int tied = 0;
private ArrayList<T> members = new ArrayList<>();
public Team(String name) {
this.name = name;
}
public String getName() {
return name;
}
public boolean addPlayer(T player) {
if (members.contains(player)) {
System.out.println(player.getName() + " is already on this team");
return false;
} else {
members.add(player);
System.out.println(player.getName() + " picked for team " + this.name);
return true;
}
}
public int numPlayers() {
return this.members.size();
}
public void matchResult(Team<T> opponent, int ourScore, int theirScore) {
String message;
if(ourScore > theirScore) {
won++;
message = " beat ";
} else if(ourScore == theirScore) {
tied++;
message = " drew with ";
} else {
lost++;
message = " lost to ";
}
played++;
if(opponent != null) {
System.out.println(this.getName() + message + opponent.getName());
opponent.matchResult(null, theirScore, ourScore);
}
}
public int ranking() {
return (won * 2) + tied;
}
@Override //따로 interface class 안만들고 team class에 바로 override 가능
public int compareTo(Team<T> team) { //Comparable interface 기능은 자바에 이미 존재.
if(this.ranking() > team.ranking()) {
return -1;
} else if(this.ranking() < team.ranking()) {
return 1;
} else {
return 0;
}
}
}
Main
package com.timbuchalka;
import java.util.ArrayList;
import java.util.Collections;
public class Main {
public static void main(String[] args) {
FootballPlayer joe = new FootballPlayer("Joe");
BaseballPlayer pat = new BaseballPlayer("Pat");
SoccerPlayer beckham = new SoccerPlayer("Beckham");
Team<FootballPlayer> adelaideCrows = new Team<>("Adelaide Crows");
adelaideCrows.addPlayer(joe);
// adelaideCrows.addPlayer(pat);
// adelaideCrows.addPlayer(beckham);
System.out.println(adelaideCrows.numPlayers());
Team<BaseballPlayer> baseballTeam = new Team<>("Chicago Cubs");
baseballTeam.addPlayer(pat);
Team<SoccerPlayer> brokenTeam = new Team<>("this won't work");
brokenTeam.addPlayer(beckham);
Team<FootballPlayer> melbourne = new Team<>("Melbourne");
FootballPlayer banks = new FootballPlayer("Gordon");
melbourne.addPlayer(banks);
Team<FootballPlayer> hawthorn= new Team<>("Hawthorn");
Team<FootballPlayer> fremantle= new Team<>("Fremantle");
hawthorn.matchResult(fremantle, 1, 0);
hawthorn.matchResult(adelaideCrows, 3, 8);
adelaideCrows.matchResult(fremantle, 2, 1);
// adelaideCrows.matchResult(baseballTeam, 1, 1);
System.out.println("Rankings"); //각팀 ranking 출력
System.out.println(adelaideCrows.getName() + ": " + adelaideCrows.ranking());
System.out.println(melbourne.getName() + ": " + melbourne.ranking());
System.out.println(fremantle.getName() + ": " + fremantle.ranking());
System.out.println(hawthorn.getName() + ": " + hawthorn.ranking());
System.out.println(adelaideCrows.compareTo(melbourne)); //각팀 ranking 비교 interface 출력
System.out.println(adelaideCrows.compareTo(hawthorn));
System.out.println(hawthorn.compareTo(adelaideCrows));
System.out.println(melbourne.compareTo(fremantle));
//ArrayList<Team> teams; //참고)비교 interface출력 간단히 collections.sort 이용해서 출력도 가능함.
//Collections.sort(teams);
}
}
'JavaCode(review)' 카테고리의 다른 글
CharAndBoolean (0) | 2020.06.23 |
---|---|
ByteShortIntLong Max/Min (0) | 2020.06.23 |
Abstract Class Challenge - interface , linkedList이용 (0) | 2020.06.21 |
InnerClass Challenge - Playlist -Album에 innerClass 이용 (0) | 2020.06.19 |
Interface Challenge (0) | 2020.06.16 |