virtualとoverrideはどちらもSolidity 0.6.0で追加されたキーワードで、
virtualは「この関数は後でオーバーライドしていいよ」
overrideは「この関数は前に定義した関数をオーバライドしてるよ」
という意味を表します。この二つはセットで使います。
例:
contract Parent {
uint u;
function Test() public virtual{
u = 1;
}
}
contract Child is Parent {
function Test() public override{
u = 2;
}
}