java接口和抽象类的主要区别是什么