java-tutorial

7) Interfaces & Abstract Classes

Goal

Use interfaces for capabilities and abstraction; understand abstract classes and when they fit.

Interfaces

interface Payable {
    long calculatePayCents();
}

class Contractor implements Payable {
    private final long hourlyRateCents;
    private final int hours;

    Contractor(long hourlyRateCents, int hours) {
        this.hourlyRateCents = hourlyRateCents;
        this.hours = hours;
    }

    public long calculatePayCents() {
        return hourlyRateCents * hours;
    }
}

Abstract classes

Use when you want shared code + some required methods:

abstract class Employee {
    protected final String name;

    protected Employee(String name) {
        this.name = name;
    }

    abstract long calculatePayCents();
}

Practical guideline

Exercises

  1. Create Storage interface with methods save(String key, String value) and load(String key).
  2. Implement it with an in-memory MapStorage.

Table of contents

  1. Getting Started: Install, run, and your first program
  2. Java Basics: types, variables, operators, formatting
  3. Control Flow: if/switch/loops
  4. Methods: parameters, return values, overloading
  5. OOP: classes, objects, encapsulation
  6. Inheritance & Polymorphism (and when not to use them)
  7. Interfaces, abstract classes, and design basics
  8. Exceptions and error handling
  9. Strings, files, and I/O basics
  10. Collections: List/Set/Map and Big-O intuition
  11. Generics (the useful parts)
  12. Lambdas & Streams
  13. Dates and time (java.time)
  14. Testing with JUnit 5 (basics)
  15. Concurrency: threads, executors, futures
  16. JVM basics: memory, GC, performance habits
  17. Build tools: Maven essentials (recommended)
  18. Next steps: projects to build