如果在子类中重写父类的方法确没有使用override标志符,子类的方法隐藏了基类的方法,而非覆盖。父类中调用覆盖的方法时,实际执行的是父类的方法。如果当前对象是子类的实例时,执行的还是父类的方法。因为方法在子类型中给隐藏了,而没有被覆盖。
示例:
program test;
type Figure = class
Function Draw();
Begin
Writeln("draw Figure");
End;
Function DrawAction();
Begin
Draw();
End;
End;
Type Ellipse = class(Figure)
Function Draw();//注意没有override
Begin
Writeln("draw Ellipse");
End;
end;
Begin
F:=CreateObject("Figure");
F.DrawAction();//输出Figure
E:=CreateObject("Ellipse");
E.DrawAction();//输出Figure
End.
与上节的例子不同,子类中定义Draw方法没有使用override关键字,说明子类的Draw方法隐藏了父类的Draw方法.
在父类在中调用Draw方法时,始终执行的是父类的Draw方法.