No you can't the override must have the same signature as the original. There are several alternatives:
Make the base class generic
abstract class Foo<TArg>
{
public abstract void Bar(TArg obj);
}
class SubFoo<T> : Foo<T>
{
public override void Bar(T obj) { }
}
Leave the original function and add an overload
abstract class Foo
{
public abstract void Bar(object obj);
}
class SubFoo<T> : Foo
{
public void Bar(T obj) { }
public override void Bar(object obj) => this.Bar((T)obj);
}
Use an interface instead of an abstract class to hide the less specific overload
interface Foo
{
void Bar(object obj);
}
class SubFoo<T> : Foo
{
public void Bar(T obj) { }
void Foo.Bar(object obj) => this.Bar((T)obj);
}