Should methods in a Java interface be declared with or without a public access modifier?
Master System Design with Codemia
Enhance your system design skills with over 120 practice problems, detailed solutions, and hands-on exercises.
In Java, interfaces play a pivotal role in achieving polymorphism and abstraction. They allow the developers to define a contract, in the form of a group of method definitions, which must be followed by the classes that implement these interfaces. An interesting detail about interface reveals itself when deciding on whether to declare methods with a public access modifier.
Java Interface Basics
Firstly, it's essential to understand that every method declaration in an interface is implicitly public and abstract. This inherent characteristic is crucial for ensuring that the interface can enforce its contract on any class that chooses to implement it.
In the absence of an access modifier, an interface method is still effectively public; Java does not allow private or protected methods in interfaces. This means when a class implements an interface, it must provide a public implementation for the methods defined by the interface, ensuring that these methods are accessible as per the interface's contract.
Historical Context and Java Versions
The treatment of access modifiers in interfaces has evolved slightly across different versions of Java. Until Java 7, it was common to explicitly specify methods in an interface as public. However, starting from Java 8, which introduced default methods allowing method bodies within interfaces, it became more common to omit the public keyword, as the abstract nature is evident, and it leads to leaner and more readable code.
Examples Demonstrating the Use of public in Interfaces
Here's a traditional approach using Java 7 or earlier:
In this case, each method uses the public keyword, which is essentially redundant but was stylistically more common in older Java versions.
From Java 8 onwards, the leaner approach typically looks like:
Advantages of Omitting the public Access Modifier
- Simplicity and Readability: Omitting the
publicmodifier makes the interface cleaner and straightforward to read. Since all interface methods are public by default, explicitly stating this is redundant. - Consistency: With the introduction of
defaultandstaticmethods in interfaces from Java 8, these methods can also only be public. Leaving out thepublicmodifier maintains consistency across all method declarations within the interface. - Reduced Verbosity: Decreasing the verbosity of your code can enhance its maintainability and understandability.
Conclusion and Best Practices
It is considered a best practice in modern Java programming to omit the public access modifier in interface method declarations. This approach adheres to the DRY (Don't Repeat Yourself) principle, leveraging the implicit public nature of interface methods to reduce unnecessary verbosity.
Summary Table
Here is a summary table concerning Java interface and the usage of public:
| Feature | Java Version | public Modifier Required? | Explanation |
| Interface Methods | ≤ Java 7 | Optional (commonly used) | Explicitly declaring methods as public was common. |
| Interface Methods | ≥ Java 8 | Optional (less common) | Implicitly public; public is considered redundant. |
| Default Methods | ≥ Java 8 | Implicitly public | Cannot be private or protected; must use the public modifier. |
| Static Methods | ≥ Java 8 | Implicitly public | Similar to default methods, these are also implicitly public. |
Ultimately, whether or not to use the public modifier in interface methods is more about adopting modern conventions and maintaining code readability and consistency. As such, leaning towards omitting it in recent and future Java versions would conform more closely to contemporary Java coding standards.

