Chapter 16 · Week 16

Final Review

"I have fought the good fight, I have finished the race, I have kept the faith." — 2 Timothy 4:7
16

Build the program the final asks for

Below is Project 14 in miniature — abstract Encounter, concrete subclasses, two interfaces, an ArrayList iterated polymorphically. If you can read this widget and imagine writing it cold in 60 minutes, you're ready.

Pilgrim's Journey Engine — The Final

Build a route from the encounter palette below, then run a pilgrim through it. Every engage() call dispatches to the right override. Strengthening and Testing interfaces fire additional behavior. This is Project 14 in miniature — the program the final asks you to build.

Encounter palette

Pilgrim

NAME Christian
FAITH
60
COURAGE
60

Route (ArrayList<Encounter>)

Add encounters from the palette →
Journey log (polymorphic dispatch)
Build a route and press run.
This is the final's shape. Abstract base + concrete subclasses + interfaces + a polymorphic ArrayList iterated with enhanced-for. If you can read this widget's behavior off a blank file in 60 minutes, you're ready. The actual exam prompt is sealed until exam time — but the shape is no secret.

The Final Is Next Week

If you have done the reps in Chapters 9–15 — your stewardship account, your apologetics library, your chain of witnesses, your argument case file, your Java migration — the final is going to feel like another project. One you've done many small versions of already.

If you have not, this is the same warning as Chapter 8 was for the midterm. There is no substitute for the reps. The exam room is honest in a way the rest of the semester usually isn't.

What the Final Tests (general shape)

  • Define an abstract base class with at least one abstract method.
  • Define two or more concrete subclasses with @Override.
  • (Medium) Define one or more interfaces that cut across the hierarchy.
  • (Hard) Define a container class that orchestrates a sequence of polymorphic operations.

That's Pilgrim's Journey. The exact prompt is sealed until exam time, but the shape is the widget above.

Top Bugs to Recognize

  1. == on Strings — use .equals()
  2. Missing @Override — method becomes new instead of override
  3. ArrayList<int> — use Integer
  4. NullPointerException — some reference was null
  5. ArrayIndexOutOfBoundsException — off-by-one on bounds
  6. super(args) not first in constructor — compile error
  7. Trying to instantiate an abstract class — make it concrete or use a subclass
  8. Wrong filename for a public class — Combatant.java for public class Combatant

Exam Rules

60 minutes. Closed-book, closed-internet, closed-AI. Your own textbook and project files are permitted. The exam project is P14: Pilgrim's Journey Engine.

How to Spend This Week

  1. Days 1–2: Re-do the 3 hardest reps from each Chapter 9–15.
  2. Days 3–4: Work through the combination drills in the Chapter 16 reps.
  3. Day 5: Do the sample final from blank. Open code/SampleFinal.java, read the prompt, close the file, solve in 60 minutes.
  4. Day 6: Read your Project 13 migration. Note what Java does for you and what it doesn't.
  5. Day 7 (exam day): Light review. Re-read the bug list. Eat. Show up rested.

Coach's Final Word — Programming, like every craft, will require practice for the rest of your life if you want it to stay sharp. The skill you have at the end of this course is real but young. The students who keep it are the ones who keep using it — side projects, internships, problem-solving puzzles, anything that puts the keyboard in their hands.

If the apologetics theme has spoken to you, the same is true there. You can finish a semester of intro apologetics readings. The questions come back, year after year, in the lives of the people around you. The skill of being able to think carefully about a hard question — and to type cleanly while you do it — is a skill you'll get to use for the rest of your life, if you keep it.

Show up rested. Trust your training. Submit something honest.

Check Your Reps

Final Self-Check

Question 1 of 4
You're building the Pilgrim's Journey engine. Encounter should be...
Why: Abstract class is right here: every encounter has shared state (name, intensity) and shared concrete methods (getName), plus an abstract engage that subclasses must implement. Pure interface would lose the shared state. A regular class would let someone instantiate new Encounter() with no engagement behavior — wrong.
Question 2 of 4
Strengthening and Testing are best modeled as...
Why: Interfaces shine for cross-cutting capabilities. Trial implements Testing but not Strengthening. Companion implements Strengthening but not Testing. Mentor implements both. They don't share a parent — interfaces let them all qualify for the right code paths.
Question 3 of 4
You have 5 minutes left on the final. Your Hard-tier feature isn't working. Best move?
Why: A working file gets you the lower-tier points. A non-compiling file gets you very little. The grader values shipping. The rubric makes clear that Normal + clean Medium beats Hard + broken every time.
Question 4 of 4
What's the engine's loop look like (Project 14 Normal)?
Why: Polymorphism does the dispatch. The enhanced-for runs engage() on each Encounter, and each subclass's override handles its own logic. The first option (instanceof + manual dispatch) defeats the whole point of polymorphism. The Project 14 rubric explicitly rejects instanceof in the main loop for the Normal tier.
YOU FINISHED. NICE WORK.

← WEEK 15: ABSTRACTS   ·   BACK TO SYLLABUS