这是初学者经常遇到的问题,看到这个问题,自己会想起以前痛苦的学习过程。 请简单回答。 接口和抽象类之间有区别吗? 肯定的回答:有差异。 那么,既然存在差异,让我们带着疑问来探索一下语言设计师们在设计接口和抽象类时为什么要设计差异,其目的是什么。 编程语言的设计其实也是哲学。
首先接口和抽象类的设计目的不同。
接口是对动作的抽象,抽象类是对根源的抽象。 对于抽象类,例如男性、女性这两个类,我们可以为这两个类设计更高层次的抽象类——人类。 关于界面,我们可以坐着吃饭,可以站着吃饭,可以用筷子吃饭,可以用叉子吃饭,甚至可以像xydtn一样用手抓着吃饭,那么因此,在Java、C#等高级语言中,一个类只能继承一个抽象类(因为同时既不是生物也不是非生物)。 但是,一个班级可以同时实现多个接口,如驾驶接口、滑冰接口、啪啪接口、足球接口、游泳接口。
总结几句话:
1、抽象类和接口不能直接实例化。 两者实例化时,涉及多态性。 如果您想进一步了解多态性,请参见上一篇文章,《最直观的解释Java的多态,看完记住一辈子!面试必备》。 要实例化抽象类,由抽象类定义的变量必须指向继承该抽象类并实现该抽象类的所有抽象方法的子类对象。 实例化接口时,在此接口中定义的变量必须指向子类的对象。 这个子类必须实现这个接口的所有方法。
2、抽象类由子类继承,接口实现在子类上。
3、接口中只能声明方法。 抽象类可以声明方法,也可以实现方法。
5、界面中的方法只有声明,不能具体实现。 这表明接口是设计的结果,而抽象类是重构的结果。
6、抽象类中也可以没有抽象方法。
7、如果某个类有抽象方法,则该类一定是抽象类。
8、抽象类中的方法都是实现的,所以抽象方法既不是静态的也不是私有的。
9、接口(类)可以继承接口,也可以继承多个接口。 但类只能继承一个类。
10、抽象级(从高到低)接口抽象类实现类。
有讨论才有进步。 大家各抒己见,让每个同学学习不同的东西!