«abstract»
Game
# players: int
+ play()
# initialize()*
# endGame()*
«interface»
Savable
+ save()
Chess
# initialize()
# endGame()
+ save()
«interface»
Rankable
+ rank()
Extend one, implement many
1abstract class Game {2 protected int players;3 public final void play() { initialize(); endGame(); }4 protected abstract void initialize();5 protected abstract void endGame();6}7interface Savable { void save(); }8interface Rankable { int rank(); }910class Chess extends Game implements Savable, Rankable { ... }
State
abstractcannot be new-ed
state +concrete + abstract