нет, что значит "по умолчанию" не особо вкуриваю сходу. Поясни
в java все методы всегда виртуальные
в c# ты должен объявить метод виртуальным если подразумевается, что потомок может его переопределить
учитывая, что оба языка в основном ооп, это принципиальное различие как в поведении в рантайме, так и в подходе к проектированию иерархий классов