Difference between set type override function override and virtual function

HI
i am confused about usage of virtual functions normally and when we want to use set type override the class.

simplified example:

class A
function func_A
endfunction
endclass

class B extends A
function func A
//over write function
endfunction
endclass.

If we do a set type override of class A with Class B in the test, we should be able to use the new override version of the function correct.

If thats the case , why do you have to define the function as virtual when doing set_type_override?

defining methods as virtual is mainly when we want to access new extended class function definition while using base class handles which already point to extended class objects.

if we dont point to extended class object , which could be the case in pre-written code where you have no idea what future extended classes you have, we have to use set type override and in that case why we need to define as virtual methods?

Thanks