使用虚函数