增加了很多抽象类