You get an error because it doesn't support the same interface. Imagine a caller like this:
AbstractClass x = new ImplementingClass();
x.Do(new SomeClass(), new SomeClass());
That should work - it's just using the AbstractClass
abstract method, right? But the values you're passing in aren't AClass
references, they're just SomeClass
references.
Your return type is okay, but the parameters you're declaring are "narrower" than the original API, so your method can't handle all the calls that the original method could, and so can't override it.