...
Code Block | ||
---|---|---|
| ||
class GrantAccess { public static void displayAccountStatus() { System.out.print(""Account details for admin: XX""); } } class GrantUserAccess extends GrantAccess { public static void displayAccountStatus() { System.out.print(""Account details for user: XX""); } } public class StatMethod { public static void choose(String username) { GrantAccess admin = new GrantAccess(); GrantAccess user = new GrantUserAccess(); if(username.equals("admin""admin")) { admin.displayAccountStatus(); } else { user.displayAccountStatus(); } } public static void main(String[] args) { choose("user""user"); } } |
Compliant Solution
This compliant solution correctly classifies this case as hiding and uses absolute, fully qualified class names GrantAccess
and GrantUserAccess
to clearly state the intent. Refrain from qualifying a static
method invocation with an expression meant for dynamic dispatch.
Code Block | ||
---|---|---|
| ||
class GrantAccess { public static void displayAccountStatus() { System.out.print(""Account details for admin: XX""); } } class GrantUserAccess extends GrantAccess { public static void displayAccountStatus() { System.out.print(""Account details for user: XX""); } } public class StatMethod { public static void choose(String username) { if(username.equals("admin""admin")) { GrantAccess.displayAccountStatus(); } else { GrantUserAccess.displayAccountStatus(); } } public static void main(String[] args) { choose("user""user"); } } |
Wiki Markup |
---|
Note that ""In a subclass, you can overload the methods inherited from the superclass. Such overloaded methods neither hide nor override the superclass methodsâthey are new methods, unique to the subclass."" \[[Tutorials 08|AA. Java References#Tutorials 08]\]. |
...
Search for vulnerabilities resulting from the violation of this rule on the CERT website.
References
Wiki Markup |
---|
\[[Tutorials 08|AA. Java References#Tutorials 08]\] [Overriding and Hiding Methods|http://java.sun.com/docs/books/tutorial/java/IandI/override.html] \[[Bloch 05|AA. Java References#Bloch 05]\] Puzzle 48: All I Get Is Static \[[JLS 05|AA. Java References#JLS 05]\] 8.4.6.3 Requirements in Overriding and Hiding |
...
12. Methods (MET) 12. Methods (MET) MET01-J. Follow good design principles while defining methods