Web Development · WDC-85

Java OOP

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.

Updated
From 8,550 THB / person 9,500 −10% excl. VAT 7% · group rates available
PDFDownload the course outline
  • Duration18 hours · 3 days
  • FormatOnsite / live online
  • Next roundOn request
  • CertificateIncluded

Course overview

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 1 OOP 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 2 Design 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

Section 10: Lab: Designing Exceptions Systematically

  • 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 3 Design 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

For organisations — in-house / private

  • Tailor the content to your team’s tools and projects
  • Your dates, at your office or live online
  • Quotation with tax ID for procurement
Corporate training quote

Instructors

Frequently asked questions

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.

Related articles

Articles are published in Thai.