lesson 1: - static initializer used in Mines.java - static initializer used in MinesUI.java - method overloading in Mines.java > startNewGame() lesson 2: - inheritance in Mines.java (extends GameBoard) - custom exception in InvalidMoveException.java - throwing exception in Mines.java > reveal() - catching exception in MinesUI.java > handleReveal() lesson 3: - method overriding in Mines.java > reset() - substitution via GameBoard parent reference in constructor chain lesson 4: - abstract class in GameBoard.java - abstract method reset() in GameBoard.java - implementation of abstract method in Mines.java > reset() lesson 5: - collections in MinesUI.java > List