【JAVA】---抽象类和接口的不同

    最近在学习设计模式的时候,总是对于抽象类和接口特别的混乱,感觉两者特别像,但是又不知道为什么设计模式用抽象类而不用接口,或者用接口而不用抽象类,所以决定总结一下这两者的不同,仅供参考!

什么是抽象类?
    抽象类,顾名思义,它表示的是一个抽象体。我们在把一类对象或者行为抽象成类的过程中,常常会发现:我没有办法去具体的描述我抽象出来的这个类。比如动物,动物具体是什么样的?我们不知道,那么我们就把它定义为抽象类,让其他的一些类去继承它,来描述它的具体的一些属性。比如白毛哈巴狗继承动物,那么我们就可以把这个动物描述为一个长着白毛的哈巴狗。


在JAVA中如何定义抽象类?
      
    在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。
使用abstract class的方式定义抽象类
abstract class Test{
          abstract void method();
}
使用interface方式定义抽象类:
interface Test{
          void method();
}
     在abstract class方式中,Test类可以有只单独属于自己的方法,这个类里面只要有一个抽象的方法就是抽象类。但是在interface方式中,Test类只能够有静态的不能被修改的数据成员(static final)所有的都是抽象方法。也就是这个原因,interface可以被认为是特殊的abstract class.    


两者的不同之处:
         
   首先,abstract类是用来继承的,一个类只能继承一个抽象类(Java不支持多继承),这样就比较局限。而interface接口,可以由多各类继承,用以实现这个接口中的方法,并且不同接口中的方法可以结合到一个类当中。这就弥补了JAVA不支持多继承的缺点,这两者暂且可以说是互补的吧!

   其次,在abstract类当中我们可以赋予这个类自身的常用方法。而interface接口类中却只能有让子类实现的方法,而不能有这个类默认的一些方法。

   最后,要想实现继承关系,那么父类和子类就必须要有Is a的关系。也就是说这个父类和子类应该是一个类型的。但是用interface就不用严格的定义这些,接口只是一个行为,我的这个类只要可以拥有这个行为,我就可以去继承这个接口并实现接口中的方法。


总结:
      说了这么多,都是关于Java中抽象类和接口中的知识,其实其他语言中的抽象类和接口的不同也和这个类似。只不过可能有的语言支持多继承,那么他们两者的不同中就会少了第一点而已!在网上看到一个特别经典的话,感觉总结抽象类和接口的不同最合适了:抽象类多用于代码的重用,而接口则侧重多态性。

评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值