I've got an array of objects, some of which use an extended version which contains a function not available in the base class. How can I call that function through the array when the array is defined by the base class?
Example
Shape[] shapes = new Shape[10];
shapes[0] = new Circle(10) //10 == radius, only exists in circle class which extends Shape
shapes[0].getRadius(); //Gives me a compilation error as getRadius() doesn't exist in the
Shape class, only in the extended Circle class. Is there a way around this?
Shape class does not contain the method getRadius and hence without casting the object of Shape to Circle, the method will not be visible. So you should use this:
((Circle)shapes[0]).getRadius();
If you're sure your object is of a given subclass, use cast:
((Circle)shapes[0]).getRadius();
try this
if (shapes[0] instanceof Circle)
((Circle)shapes[0]).getRadius();
来源:https://stackoverflow.com/questions/18285130/java-calling-functions-in-extended-classes-through-an-object-array