class MyClass {
// Private method
private void displayMessage() {
System.out.println("Hello from a private method!");
}
// Public method that calls the private method
public void callPrivateMethod() {
displayMessage(); // Private method invoked here
}
}
public class Main {
public static void main(String[] args) {
MyClass obj = new MyClass();
obj.callPrivateMethod(); // indirectly calls the private method
}
}
method = object.getClass().getDeclaredMethod(methodName); method.setAccessible(true); Object r = method.invoke(object);
package com.oca.class_relationships;
interface Fish { int getNumberOfScales(); }
interface Piano { int getNumberOfScales(); }
class Tuna implements Fish, Piano {
public int getNumberOfScales() { return 91; }
}
sealed keyword) allow controlled overriding, ensuring only permitted subclasses extend functionality.record keyword) prevent unnecessary overriding by enforcing immutability but allow selective customization.default keyword).
sealed class Animal permits Dog, Cat {
void sound() {
System.out.println("Animal makes a sound");
}
}
final class Dog extends Animal {
@Override
void sound() {
System.out.println("Dog barks");
}
}
final class Cat extends Animal {
@Override
void sound() {
System.out.println("Cat meows");
}
}
public class Test {
public static void main(String[] args) {
Animal myDog = new Dog();
myDog.sound(); // Output: Dog barks
Animal myCat = new Cat();
myCat.sound(); // Output: Cat meows
}
}
Here, overriding ensures that the correct subclass method (`Dog` or `Cat`) is executed at runtime.
Conclusion:
The primary benefit of overriding in Java SE 22 is to enable polymorphism, maintainability, and extensibility, with optimizations through sealed classes, records, and JVM performance improvements.