抽象类和接口的区别

使用和功能的区别:

1.继承规则不同:为了数据安全,抽象类被继承时,一个类只能有一个直接父类,也就是单继承,但是一个类可以实现多个接口,接口弥补了类的不能多继承的缺点,抽象类和接口的双重设计既保持了类的数据安全,也变相的实现了多继承。

2.接口是可插入性的保证:一个对象需要知道其他的一些对象,并且与其他对象发生相互作用以完成一项工作。现在要在系统中加入一个新的类C,问题是已有某些类可以帮新类完成一部分的功能,这时候怎么办?我们肯定会选择通过继承来得到一些已经是新得功能,但是,如果有两个功能是分别写在两个类(A,B)里面呢, Java不支持多重继承,有一个可以解决的办法是让A继承B,我们再用C继承A,这样是可以得到两个我们想要的功能(更好一点的办法就是把A和B的功能放到一个抽象类AB里面,我们的C可以继承AB),但是,如果我们需要得功能在100个类里,这时候肯定就不能用这样得方法来实现了。这时接口就显示出其妙处来。在一个类的等级结构中的任何一类都可以实现一个接口,这个接口会影响到此类的所有子类,但不会影响到此类的任何超类,此类不得不实现这个接口所规定的方法,而其子类则可以从此类自动继承得到这些方法,当然也可以置换掉这些方法,这时候我们也就说这些子类具有可插性。

3.Java抽象类可以实现某些方法的部分实现,但是接口不可以(抽象类的优点)。如果向一个抽象类中加入一个新的具体方法,那么它所有的子类都会得到这个新的方法,如果向一个接口中加入一个新的方法,所有实现这个接口的类将会无法成功编译,必须让实现这个接口的类实现这个方法才行。

4.一个抽象类的实现只能由这个抽象类的子类给出,也就是说这个实现处在抽象类所定义的等级结构中,而由于Java语言的单继承性,抽象类作为类型定义工具的功能大打折扣,这时 Java接口的优势就体现出来了,任何一个实现了一个Java接口所规定的方法的类都可以具有这个接口的类型,而一个类可以实现任意多个接口,从而这类就有了多种类型。

语法上的区别

1.继承抽象类用 extends 关键字;实现接口用 implements 关键字。继承写在前面,实现接口写在后面:

class className extends abstractClassName implements interfaceName1,interfaceName2,...{
    ...
}

2.抽象类中可以有自己的数据成员(默认具有friendly权限,其值可以在子类中重新定义,也可以重新赋值),也可以有非抽象的成员方法;而接口中只能有静态的、不能被修改的数据成员(默认是public static final 型的,且必须给其赋初值,所有实现类中不能重新定义,也不能修改其值,不过接口中一般不定义数据成员)所有的成员方法都是抽象的(默认public abstract 类型)。

3.抽象类和接口反应的设计理念不同,抽象类表示的是“is - a”关系,接口表示的是“lile - a”关系。

4.实现接口的类必须实现其中的所有的方法,继承自抽象类的子类实现所有的抽象方法。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值