Pages

Making members private in Java is one of best coding practice. Private members (both fields and methods) are only accessible inside the class they are declared or inside inner classes. private keyword is one of four access modifier provided by Java and its a most restrictive among all four e.g. public, default(package), protected and private. Though there is no access modifier called package, rather its a default access level provided by Java. In this Java tutorial we will see why should we always make members of class by default as private and answer to one of popular Java interview questioncan override private methods in Java.

Why should you make your members private by default:

As I said earlier keeping member variable or method private as default provides Encapsulation. if you need it access from other class keep increasing accessibility step by step i.e. from private to default which is package-private i.e only accessible inside same package to protected and finally public. Don't make any method by default public which most of Java programmers do, that's against concept of Encapsulation in Java. Here are some benefits of making variables or methods private in Java:

1) private methods are well encapsulated in class and developer knows that they are not used anywhere else in code which gives them confident to change, modify or enhance private method without any side-effect.

2) By looking to the private method you know by sure that no one is using it which is great help duringdebugging java program.

3) IDE like Netbeans and Eclipse use this information and automatically check whether private methods are used inside Class or not and can display relevant warning to improve code quality or delete unused statements, variables or methods.

4) private methods use static binding in Java and they are bonded during compile time which is fast compared to dynamic binding which occurs during runtime and also gives chance to JVM to either inline the method or optimize it.

5) Making variables private in java and providing getter and setter for them makes your class compatible Java bean naming convention and other reflection based frameworks like displaytag .

Can we override Private method in Java

No you cannot override private methods in Java, private methods are non virtual and accessed differently than non-private methods. Sincemethod overriding can only be done on Sub Class and since private method is not accessible in sub class or derived class, You just can not override them. Another possibility of overriding private methods in inner class by extending outer class, since private methods are accessible inside inner class. This will also not work because private methods are bonded during compile time and only Type (or Class) which is used to locate a private method. For example in below code where it looks like Inner SubClass is overriding private method , if you call privateMethod() with a type of Super Class but object of Sub Class, it will only execute privateMethod() declared in super Class.

Should I always make private method as final in Java

Using final and private in Java with method is a good choice but I don't think it offer any benefit in terms ofperformace or not. Rather this decision should be taken on the basis of design, functionality and ensuring readability of code. Since making a method final just limit there ability to be overridden, it doesn't make much sense to mark a private method as final in java, because private method can not overridden in Java by any means.

Important Points about private keyword in Java

Few importantpoints to remember about private keyword in java before seeing example of private keyword and overriding private methods in Java which is not possible.

1.private keyword can be applied to fields, methods and inner class in Java.

3.Though private methods or variables are not accessible outside of Class, they can be accessed via reflection by using setAccessible(true) and changing there private visibility.

4.Private method can not be overridden in Java, not even inside inner classes.

5.private members allows Compiler and JVM to optimize it for better performance.

Example of private field and method in Java

Here is a code example or private keyword in Java. This examples shows that private methods uses static binding at compile time and can not be overridden. Don’t confuse with the output though regarding private variable because its accessible inside Inner classes. It will be compiler error if private variables used outside the class.

In Summary private keyword in java allows most restrictive access to variables and methods and offer strongest form of Encapsulation. private members are not accessible outside the class and private method can not be overridden.

9 comments
:

suraj
said...

There is a question in one Java interview "Can we make class private in Java", I said no as class can only be public or without any modifier i.e. default access on package level, but he was keep asking. do you know when can we make class private in Java?

How to test private method in Java using JUnit, Since I can not call it outside the class It looks either I need to change access modifier form private to public or wrap it inside public method, let me know id you have better way of testing a private method in Unit or TestNG ?

Never use private, I know more about programming than the braindead morons that designed the Java language, and it completely breaks the OOP principles of inheritance and code reusability. Use package or protected instead.