I have the following class hierarchy:
public abstract class Root {
...
}
public class A extends Root {
...
}
public class B extends Root {
...
}
public class C extends Root {
...
}
I want to apply a function func on objects of static-type Root, so that the behavior of the function will be dependent on the specific dynamic-type.
So obviously I can accomplish it using polymorphism. I could create an abstract function inside Root and implement it differently in every class that extends Root.
However, what if the code of Root is inaccessible and I can't edit it? The only solution I could think of is to implement func inside A, B and C separately, and then do something like this:
public static void applyFuncOnRootObject(Root object) {
if (object instanceof A) {
((A) object).func()
} else if (object instanceof B) {
...
}
...
}
Is there a better solution that avoids the ugly casting and if-statements?
CodePudding user response:
You could create your own Root class.
public class MyRoot extends Root{
public void func(){}
}
And make classes A, B and C extends MyRoot instead of Root
