OCP 17 Exam - chapter 7 notes - part 2 (sealed and records)
OCP 17 Exam - chapter 7 notes - part 2 (sealed and records)
Sealed classes and interfaces
- sealed classes allow us to implement “enum” on class level, so it can be used in switch statement:
1
2
3
4
5
6
7
8
Sealed v = new Chapter7_SealedClasses().new MyClass();
// note: use "java --enable-preview --source 17" to enable patterns in switch statements
switch(v) {
// case SubClass -> System.out.println("Subclass"); error: type pattern expected
case SubClass s -> System.out.println("Subclass");
default -> System.out.println("default"); // without default, there is error: the switch statement does not cover all possible input values
case MyClass m -> System.out.println("MyClass");
}
- “sealed class must have subclasses”, following is not permitted:
1
sealed class Sealed { }
- class that extend sealed class must have one of the following modifiers:
final
,sealed
,non-sealed
1
2
sealed class Sealed permits SubClass { }
class SubClass extends Sealed { } // error: sealed, non-sealed or final modifiers expected
- class mentioned in
permits
must extend sealed class
1
2
sealed class Sealed permits SubClass { }
final class SubClass { } // DOES NOT COMPILE: subclass Chapter7_SealedClasses.SubClass must extend sealed class
sealed class can be indirectly extended when extending
non-sealed
subclass (review Q.14)
Records
- record cannot declare static field with the same name as instance field
1
record SameName(String name) { static int name = 0; } // DOES NOT COMPILE: record component name is already defined in record SameName
Nested classes
exam may trick us by extending
final
class, even using anonymous class! (review Q.15)
Polymorphism
encapsulation allows both getters and setters as the goal is to only restrict direct access to variable (review Q.12)
Playground code
https://github.com/RG9/rg-playground-ocp17/blob/main/Chapter7/Chapter7_SealedClasses.java
This post is licensed under CC BY 4.0 by the author.