This week's book giveaway is in the OO, Patterns, UML and Refactoring forum. We're giving away four copies of Refactoring for Software Design Smells: Managing Technical Debt and have Girish Suryanarayana, Ganesh Samarthyam & Tushar Sharma on-line! See this thread for details.
The purpose of "private" is to promote encapsulation. Member variables should almost always be private; class A should not be trying to touch the member data of class B.
"final" has a few different meanings. Applied to a variable, it prevents changes to the variable after initialization, making it a "constant." Applied to a method, it does, indeed, prevent overriding. Applied to a class, it prevents the class from being extended. All of these meanings have something in common: they allow the programmer to have fairly strong beliefs about the value or purpose of something. If you know a class can never be extended, then you know for sure how an instance of the class will behave -- you know you're not dealing with a subclass that changes something, since you know no subclasses can exist. This helps with both engineering and security. [ September 05, 2006: Message edited by: Ernest Friedman-Hill ]
Hi all, This is about final/private in methods only.
final does not allow overriding of methods. If you do, you'll get a compiler error.
private methods are not visible outside their classes. So when you extend a class, you can give a method the same declaration as in the upper class. It is a redefinition (no override!) with no relation to the upper class method. Especially no polymorphism. Example
The bar method is only necessary to call foo from outside its class.
Outputs 3* ALPHA Remove the private (-> default public or protected) and you'll have polymophic output. make it final (in class Alpha), you'll get a compiler error in class Beta.
ps: upper class methods can also be wearing large hats at a horse race or polo match.
all events occur in real time
Joined: Sep 20, 2005
Thanks a lot for prompt answers.. Now all my doubts are cleared..