Java OOP is a course in object-oriented design and programming with Java 25 LTS, from classes, encapsulation, inheritance and polymorphism to interfaces, records, sealed classes, the SOLID principles, design patterns and unit testing with JUnit. It suits people who already write Java, developers who want maintainable code and computing students.
Many people who can already write Java still put everything into a few large classes. As the system grows it becomes hard to change, hard to test and impossible to reuse. Thinking in objects properly gives each piece of code a clear responsibility, and modern Java adds tools that make good design easier, such as records, sealed classes and pattern matching, which older OOP textbooks do not cover.
This course teaches object-oriented principles in depth on Java 25 LTS and shows how to apply them. It starts with thinking in objects, class design, abstraction, encapsulation, inheritance and polymorphism, then moves on to abstract classes and interfaces, records, sealed classes, pattern matching, composition and generics. It then raises the level to design with the SOLID principles, class diagrams and common design patterns, and uses JUnit 6 unit tests to refactor with confidence. It closes with a capstone that designs and builds a system with OOP from start to finish. (3 days, 6 hours per day, 18 hours in total, Intermediate level.)
What you’ll gain
Understand why to program with OOP and how it differs from a top-down approach
Design classes and objects with clear responsibilities, using abstraction and encapsulation
Use inheritance, polymorphism, overloading, overriding and final in the right places
Choose between abstract classes, interfaces, records and sealed classes to suit the task
Use composition and generics to make code flexible and reusable
Design to the SOLID principles and read and write class diagrams
Apply common design patterns found in real projects
Write unit tests with JUnit 6 and refactor object-oriented code safely
Who this course is for
Anyone who can write Java and wants to program in an object-oriented way properly
Developers who want code that is easy to maintain and extend
Anyone planning to move on to frameworks such as Spring Boot or Jakarta EE
Computing students and lecturers who want to understand OOP and design patterns
IT managers and tech leads who review code and set the team's design approach
Prerequisites
Able to write Java, including variables, conditions, loops, methods and ArrayList
Some experience creating classes and objects, even if not yet fluent
Basic use of an IDE such as IntelliJ IDEA or VS Code
A laptop that can run JDK 25 and an IDE, with permission to install software
Curriculum
Course Details
This course is the 2026 edition that replaces the previous JAVA OOP course. It has been rewritten from scratch for Java 25 LTS. It runs for 3 days, 6 hours per day (18 hours in total, 09:00-16:00), as lectures with labs built on a library system brief that grows throughout the course. Intermediate level. It keeps the original core topics of classes, abstraction, encapsulation, inheritance, polymorphism, final, abstract classes and interfaces, and adds records, sealed classes, pattern matching, composition, the SOLID principles, design patterns and unit testing with JUnit 6. It builds on Basic Java Programming with a deeper focus on object-oriented design. Learners take home a lab guide, source code and Maven projects for every lab.
Day 1OOP Principles on Java 25
Section 1: Lab: OOP Concepts and Tool Setup
Why program with OOP, and its pros and cons compared with a top-down approach
Thinking in objects: pick out things, responsibilities and relationships from a brief
Install JDK 25 and IntelliJ IDEA or VS Code, and create a Maven project
Lab: turn a library system brief into an initial list of classes
Section 2: Classes, Objects and Constructors
Fields, methods and object references in memory
Constructors, constructor overloading and this
Flexible constructor bodies in Java 25 for validating values before calling super
Static members compared with instance members
Lab: book and member classes with data validation
Section 3: Abstraction and Encapsulation
Abstraction: expose only what users of a class need to know
Hide state with private and the other access modifiers
Getters, setters and when a setter should not exist
Immutable objects, and packages for grouping classes
Lab: rework a bank account class so its balance cannot be changed the wrong way
Section 4: Lab: Inheritance
The principle of inheritance and is-a relationships
super, protected and the order in which objects are constructed
Override toString, equals and hashCode correctly
The pitfalls of inheritance hierarchies that are too deep
Lab: a hierarchy of library media such as books, magazines and e-books
Section 5: Polymorphism and final
How overloading differs from overriding
Dynamic dispatch and referring to objects through a superclass type
final on variables, methods and classes
Lab: calculate late fees that differ by media type using polymorphism
Day 2Design Tools in Modern Java
Section 6: Abstract Classes and Interfaces
How an abstract class differs from an ordinary class
Interfaces with default, static and private methods
Choosing between an abstract class and an interface
Functional interfaces and lambdas from an OOP point of view
Lab: design an interface for several notification channels
Section 7: Lab: Records, Sealed Classes and Pattern Matching
Records for immutable data, and compact constructors
Sealed classes and sealed interfaces to limit the permitted subtypes
Pattern matching with instanceof and switch
Record patterns and unnamed patterns
Lab: model several payment types with a sealed interface and switch
Section 8: Composition over Inheritance
has-a relationships, association and aggregation
Delegation, and why composition should usually come first
Enums with their own behaviour
Lab: refactor a tangled hierarchy into composition
Section 9: Generics and Collections in Design
Generic classes and generic methods
Bounded types and wildcards
Comparable and Comparator for ordering objects
Choose a List, Set or Map to fit the data model
Lab: a generic repository for the library system's data
Checked versus unchecked exceptions and when to use each
Create custom exceptions that carry business meaning
try-with-resources, and never swallowing errors
Use Optional instead of returning null
Lab: handle borrowing over the limit and books that are unavailable
Day 3Design Principles, Design Patterns and Testing
Section 11: The SOLID Principles and Class Diagrams
Single Responsibility and Open/Closed
Liskov Substitution, Interface Segregation and Dependency Inversion
Coupling and cohesion
Read and write class diagrams with PlantUML or Mermaid
Lab: analyse code that breaks SOLID and propose fixes
Section 12: Creational Design Patterns
What design patterns are, and how to use them without overdoing it
Factory Method and static factories
Builder for objects with many values
Singleton and its pitfalls
Lab: create several member types with a factory and a builder
Section 13: Lab: Structural and Behavioural Patterns
Adapter and Decorator
Strategy and Template Method
Observer for event notification
Write patterns concisely with lambdas, records and sealed classes
Lab: use Strategy for late fees and Observer to announce available books
Section 14: Lab: Unit Testing and Refactoring
Write unit tests with JUnit 6 and readable assertions
Mock dependencies with Mockito
Common code smells in object-oriented code
Refactor step by step under the protection of tests
Use an AI assistant to review the design, and check its output
Section 15: Workshop: Capstone System Design with OOP
Analyse a booking or lending system brief of your choice
Draw the class diagram and choose suitable patterns
Build it with unit tests covering the key parts
Present the design, review it together and plan next steps
Schedule & training options
For individuals — public rounds
No public rounds are open right now. Join the waiting list and we will contact you first when the next round opens, or ask us on LINE. Or call 02-570-8449 or 088-807-9770
How does object-oriented programming differ from a top-down approach?
A top-down approach splits work into steps and functions in the order they run, with data often passed through many functions and changeable from many places, which suits small programs. OOP splits a system into objects that combine data and behaviour, each managing its own state with a clear responsibility, so a growing system is easier to change, test and reuse. Java 25 also offers records and sealed classes that make data models more concise.
How do abstract classes and interfaces differ in Java?
An abstract class can hold state (fields) and shared code, has constructors, and a subclass can extend only one, so it suits classes that genuinely share a type. An interface defines capabilities a class must provide, holds no object state but can have default, static and private methods, and a class can implement many, so it suits contracts between parts of a system. To restrict which types may extend or implement them, you can make either one sealed.
How does overloading differ from overriding?
Overloading means several methods in the same class share a name but take different parameters, and the compiler picks which one to call at compile time. Overriding means a subclass rewrites a method with the same name and parameters as its superclass to change its behaviour, and Java picks the version to run at run time based on the object's actual type, which is the heart of polymorphism. Always add @Override so the compiler can check it.
Who is the Java OOP course for, and what should I know beforehand?
It suits people who can already write Java and want to program in an object-oriented way properly, developers who want maintainable code, anyone moving on to Spring Boot or Jakarta EE, students, lecturers and tech leads. You should know basic Java such as variables, conditions, loops, methods and ArrayList. If you have not written Java before, take Basic Java Programming first.
What will I be able to do after the Java OOP course?
You will be able to break a brief into classes with clear responsibilities, apply encapsulation, inheritance and polymorphism in the right places, choose between abstract classes, interfaces, records and sealed classes, design to the SOLID principles, draw class diagrams, use common design patterns and write JUnit 6 unit tests to refactor safely. Participants who complete the training receive a Certificate of Completion with its own number, which can be verified online.
Can the Java OOP course be run in-house for our team?
Yes. It can be run in-house for your team, with exercises adapted to your work, such as examples from your organisation's business domain, or a focus on reviewing and refactoring the Java code your team maintains. You can request a quotation from this page, or contact us on LINE @itgenius or by phone on 02-570-8449.
Java is still the main language behind many enterprise, banking and backend systems, but the language has changed a great deal in recent years. Many books and examples still teach Java 8 style, with long code and no records, pattern matching or virtual…
Many organisational Java web systems still run on servlets and JSP with Hibernate, and IT teams need to maintain or modernise them. Since Jakarta EE 9, every javax package has become jakarta, and current Hibernate uses annotations with Jakarta Persistence…
Many people want to start programming but get stuck at the first step, because most books are written for readers who already have a background. They open with technical terms and long code to memorise before explaining how a computer actually thinks. Java is…