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.