STUDYECRAT Java-9 Private Interface Methods
60s
Java9 Private Interface Methods
Prove your skills in this interactive quiz
Live Code
Run snippets directly
Timed
60s per question
Scored
Earn 3D badges
★ Java 9 Private Interface Methods: Key Interview Insights
1. Core Syntax of Private Interface Methods
interface Logger {
private String sanitize(String input) {
return input.trim().toLowerCase();
}
default void log(String msg) {
System.out.println(sanitize(msg));
}
}
// Private methods MUST have a body (non-abstract)
private String sanitize(String input) {
return input.trim().toLowerCase();
}
default void log(String msg) {
System.out.println(sanitize(msg));
}
}
// Private methods MUST have a body (non-abstract)
- Tip: Use private methods to break down complex default method logic
- Real Use: Input validation before logging (prevents NPEs and formatting issues)
2. Static Private Methods for Utility Logic
interface MathUtils {
private static boolean isEven(int num) {
return num % 2 == 0;
}
static void printEven(int x) {
if (isEven(x)) System.out.print(x + " is even");
}
}
// Static private methods can only be called by other static methods
private static boolean isEven(int num) {
return num % 2 == 0;
}
static void printEven(int x) {
if (isEven(x)) System.out.print(x + " is even");
}
}
// Static private methods can only be called by other static methods
- Tip: Great for reusable validation/calculation logic in utility interfaces
- Real Use: Financial rounding operations in banking interfaces
3. Private Methods Are NOT Inherited
interface A {
private void secret() { System.out.print("A"); }
default void expose() { secret(); }
}
class B implements A {
void tryAccess() {
secret(); // COMPILE ERROR
}
}
// Implementing classes cannot see/override private methods
private void secret() { System.out.print("A"); }
default void expose() { secret(); }
}
class B implements A {
void tryAccess() {
secret(); // COMPILE ERROR
}
}
// Implementing classes cannot see/override private methods
- Tip: Use 'final' default methods if you want to prevent overriding core logic
- Real Use: Hiding encryption algorithms in security APIs
4. Eliminating Duplicate Code in Default Methods
interface Formatter {
private String normalize(String s) {
return s.replaceAll("\\s+"," ").trim();
}
default String formatA(String s) {
return "A:" + normalize(s);
}
default String formatB(String s) {
return "B:" + normalize(s);
}
}
// Single private method reused across multiple default methods
private String normalize(String s) {
return s.replaceAll("\\s+"," ").trim();
}
default String formatA(String s) {
return "A:" + normalize(s);
}
default String formatB(String s) {
return "B:" + normalize(s);
}
}
// Single private method reused across multiple default methods
- Tip: Extract common string/number manipulations into private methods
- Real Use: Data formatting in internationalization (i18n) interfaces
5. Accessing Private Fields
interface Config {
private String DEFAULT_PATH = "/config";
private void validatePath(String p) {
if (!p.startsWith(DEFAULT_PATH))
throw new IllegalArgumentException();
}
default void load(String path) {
validatePath(path);
// Load logic...
}
}
// Private methods can access private interface fields
private String DEFAULT_PATH = "/config";
private void validatePath(String p) {
if (!p.startsWith(DEFAULT_PATH))
throw new IllegalArgumentException();
}
default void load(String path) {
validatePath(path);
// Load logic...
}
}
// Private methods can access private interface fields
- Tip: Combine private fields + methods for encapsulation in interfaces
- Real Use: Environment-specific configuration validation
💡 Pro Interview Tip
When asked about private interface methods, emphasize their two key purposes: 1) Code reuse between default methods, and 2) Hiding implementation details. Mention how they differ from class private methods (no inheritance).