黑马程序员技术交流社区

标题: abstract class和interface有什么区别? [打印本页]

作者: 陌城    时间: 2016-2-28 22:45
标题: abstract class和interface有什么区别?
什么时候用abstract?interface呢?

作者: liu1097974712    时间: 2016-2-28 23:49
abstract class,是抽象类,interface是接口
共同点:两者都不可直接创建对象,interface类下,方法都是抽象的,abstract类里,也有抽象方法,或者不定义抽象方法(目的在于不让此类创建对象)两者都需要借助子类的方法去覆盖掉全部抽象内容,然后子类即可创建对象,覆盖不掉,子类也变成抽象类。
区别:接口是公开的,不可有私有方法或变量,抽象类可有,接口与接口可多继承,实现接口可多实现,而抽象类只可单继承;
abstract类中如果有抽象方法,那么在其子类中,即可用抽象类中的抽象方法命名一个函数,覆盖掉父类的抽象方法,这样,子类即可创建对象,也实现了对抽象方法的覆盖和扩展,我反正就记住一点,抽象方法就是让你后面去添加内容,扩展内容的;
接口的好处就太多了,综其一点,扩展,实现功能,面向接口编程时代来临了,嘿嘿,个人理解,仅供参考。
作者: cumtbao    时间: 2016-2-28 23:51
接口中只能是抽象方法,不具体实现,是like a的关系;而抽象类中可以有普通方法,是is a的关系
作者: fagug    时间: 2016-2-29 00:12
本帖最后由 fagug 于 2016-2-29 00:14 编辑

接口是一种特殊的抽象类,但是两者有些区别:
1、抽象类中有抽象方法,也有非抽象方法,可以定义变量。接口中定义常量,方法全是抽象方法和默认方法。
2、抽象的实例化需要子类继承,由于java的单继承限制,子类的方法大部分继承于抽象类。
      接口的实例化需要实现接口,子类可以在实现接口的同时还继承某一个父类,且可以实现多个接口,这样就大大扩展了子类的功能。一般建议拓展功能使用接口。

作者: 许鹏飞    时间: 2016-2-29 12:18
却别在于,接口必须全是抽象类且没有方法实体,抽象类完全是自己定义出来的,可以有具体方法(目前接口也可以定义具体的方法,这个不说了,一般没人这么用)
作者: 陌城    时间: 2016-2-29 19:33
liu1097974712 发表于 2016-2-28 23:49
abstract class,是抽象类,interface是接口
共同点:两者都不可直接创建对象,interface类下,方法都是抽 ...

谢谢 谢谢
作者: zhaoxiaolang    时间: 2016-2-29 20:08
abstract class只能被继承一个,而一个class可以实现(implements)多个interface,所以能用interface就用interface吧




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2