So in your example you're defining "duplicate" in Shape and in its subclass "Circle". Since this is an override (it can't be an overload because you have not changed the signature) the compiler will know which class to call which means there is no ambiguity here so it will compile correctly.
Quiz time... where will the call for the following examples come from (Shape or Circle):
Shape s = new Shape(); s.duplicate(); - duplicate of shape class will be called
Circle c = new Circle(); c.duplicate(); - here duplicate of circle
Shape sc = new Circle(); sc.duplicate(); - here complier will check if duplicate method exists in class shape.. at run time call will be from circle class as it is override.