实现了大部分接口