温故知新---抽象类和接口的异同

来源:互联网 发布:如何知道别人网络密码 编辑:程序博客网 时间:2024/04/29 19:28

【概念定义】


      抽象类(abstract class):抽象类通常代表一个抽象的概念,是对不能具体实例化而又具有意义的一种类的抽象。比如狮子老虎是一种动物,对它们进行抽象得到抽象类动物类,但是动物类是不能被实例化的。

      抽象类的界定:如果类中至少具有一个抽象方法(可以含有一般方法),那么它就是抽象类。这个抽象方法需要在被子类继承时必须重写。

 

      接口(interface):接口是一种公共方法或规格的集合,它没有修饰符和方法体(方法的具体实现),它只能被实现。

      接口的作用:接口为类的实现提供了一个接口,对方法和实现进行了解耦。多个类可以同时实现一个接口,实现接口的类必须实现接口中的属性和方法。


【相似】

      1。都不能被实例化。

      2。都包含虚方法或抽象方法。

      3。可以通过继承和实现的方法实现其抽象方法。


【区别】


     形态上的区分:

      1.抽象类可以包含一些方法的具体实现,而接口里只能有方法。

      2.抽象类可以被子类至少部分实现,接口则是全部实现。                                                                                                               3.两者和类的关系:一个类只能继承一个抽象类;多个类可以实现一个接口。


     实现上的区分:

       1,概念上讲,接口是对一组类的公共行为的一种抽象,而抽象类是对一组类的抽象。例如:狮子老虎都具有叫、跑的方法行为,抽象出来就是接口;而对狮子老虎抽象出的动物类就是抽象类。

       2,如果行为跨越不同类的对象,使用接口;如果行为属于一些类似的对象,使用抽象类。

            例如:对于叫这个方法,如果实现的对象是狮子老虎这类属于动物的,适合用抽象类,因为他们都可以继承动物抽象类;但是如果实现的对象包括动物、人、机械等不同类别的,适合用接口,因为多个类可以同时实现接口。


            感受:从这个角度来说,它其实默认的是对已确定的类的区别。比如老虎和狮子,它们可以抽象成动物类,将虚方法写入动物类,被子类继承。但是换个角度想,将动物和人抽象,它们都是生物类,可以将叫的虚方法写入生物类,这样的话,仍然可以使用抽象类。

           也就是说,如果对于已经确定了的类(不会改动数量或类别),可以知道都有什么类,那么它就可以进一步抽象使用抽象类;但是如果是对具体的类的数量和种类不清除的情况下,最好使用接口。因为接口可以对多种类开发端口。这也反映了它们的一个特性:接口是自上而下的设计,抽象类是自底向上的抽象。

      3.接口比抽象类更加灵活。

          针对扩展修改这一方面,如果出现了新的需求,尤其是在对同一方法实现的对象的类别发生了改变,那么使用抽象类是不合适的。接口可以很好的应对需求的改变。

0 0
原创粉丝点击