刚刚学习时我们会想到,接口与抽象类没有什么不同,假如,一个抽象类机动车,里面的方法声明是刹车,另外有两个接口一个是索价一个是控制温度,这时我们创建一个bus类,它可以直接继承抽象类,重写刹车方法,然后在主类中调用刹车,然后再通过重写接口中的索价方法,在主类中调用,另外我们再创建一个Taxi类,一样的,继承抽象类,重写接口方法,我们再通过接口给taxi加上一个控制温度方法。刚刚学习时会想为什么不直接把接口中的方法写在抽象类中,或者抽象类中的方法写到接口中呢,通过一段学习后,我们会理解,如果再有别的类调用,他们不是机动车类,那再调用时,通过机动车类声明就不合适了,比如我们创建一个电影院类,他调用索价和控制温度,如果这两个在机动车的抽象类中,我们声明电影院为机动车类就不合适了,所以这时有了接口,我们可以实现多个接口,但是一个类只能继承一个父类。
- abstract类与接口的比较
- 比较如下
①abstract类和接口都可以有abstract方法
②接口中只可以有常量,不能有变量,而abstract类中既可以有常量也可以有变量。
③abstract类中也可以有非abstract的方法,接口不可以。
2.在设计程序时应当根据具体的分析来确定是使用抽象类还是接口
abstract类除了提供重要的需要子类重写的abstract方法外,也提供了子类可以继承的变量和非abstract方法。如果某个问题需要使用继承才能更好地解决,比如,子类除了需要重写父类的abstract方法,还需要从父类继承一些变量或继承一些重要的非abstract方法,就可以考虑用abstract类。
如果某个问题不需要继承,只是需要若干个类给出某些重要的abstract方法的实现细节,就可以考虑使用接口。