For example, Dynamic Dispatch ensures that Java always calls the
toString()
method of the correct type (i.e., for Integer
or
NumberFormatException
) in the code below:
String s = ...;
Object a;
try {
a = Integer.valueOf(s);
} catch (NumberFormatException e) {
// not an int
a = e;
}
System.out.println(a.toString());
A program analysis must thus be able to reason that the call
a.toString()
may call either
String java.lang.Integer.toString()
or
String java.lang.NumberFormatException.toString()
.
A sound (but conservative) may-call analysis such as
Class Hierarchy Analysis might e.g. report that a.toString()
may call any toString()
method in any Java class,
though this imprecision may be detrimental to the quality of the call graph analyses' Client Analyses.