lesson 1: - static initializer in Mines.java (static block initializing RANDOM_GENERATOR) - static initializer in MinesUI.java (static block initializing BUTTON_THEMES) - constructor overloading demonstrated across project (e.g., RandomNumberGenerator and Mines constructors) lesson 2: - inheritance: Mines extends GameBoard (GameBoard.java → Mines.java) - custom exception class: InvalidMoveException (thrown in Mines.reveal) - throwing exceptions in Mines.reveal() - catching exceptions in MinesUI.handleReveal() within UI logic lesson 3: - method overriding: Mines overrides abstract GameBoard.reset() - substitution: GameBoard constructor called via super(width, height) inside Mines lesson 4: - abstract class: GameBoard.java - abstract method: reset() defined in GameBoard - implementation of abstract method in Mines.reset() lesson 5: - collections: MinesUI stores buttons in List