zoukankan      html  css  js  c++  java
  • 抽象类和接口

    抽象类和接口的区别

    1 从语法的角度来讲

    抽象类:用abstract来修饰, 即public abstract class TestAbstract {},他捕获子类的通用性,不能被实例化,只能作为子类的超类,是继承层级里子类的模板

    接口:用interface来修饰,即public interface TestInterface {},他是抽象方法的集合,默认都是abstract的,接口本身不做任何事情,是一种规范,有子类提供实现,使用implements关键字来实现接口。

    | 参数 | 抽象类 | 接口 |

    | 实现方法 | 子类用extends关键字来继承抽象类,若子类不是抽象类,实现所有父类的抽象方法,可重写非抽象方法 | 子类用implements关键字实现接口,需实现接口中所有的抽象方法 |

    | 构造器 | 可以有,不能abstract修饰 | 不能有|

    | 普通类的区别 | 不能被实例化 | 类型不同 |

    | 访问修饰符 | 都可以用 | 默认为public,不能用其他修饰符 |

    | 多继承 | 可继承一个类和实现多个接口 | 接口只能继承一个或多个接口 |

    | 添加新方法 | 若添加非abstract方法,直接添加,子类无需修改,若添加abstract方法,子类需要修改并实现该方法 | 只要接口中添加方法,实现它的类都要更改并实现 |

    2 从设计层面的角度来讲

    抽象类:是对事务的抽象,是对整个类进行抽象,包括属性和行为(方法)
    接口:是对行为(方法)的抽象

    若一个类继承或实现了某个抽象类,那么一定是抽象类的种类(拥有同一种属性或行为的类)

    抽象类:作为很多子类的父类,是一种模板设计;增加新的方法子类可以不变更;

    接口:是一种规范,它是一种辐射式设计;增加新的方法实现它的类都需要变更;

    3 从使用时机的角度来讲

    若拥有一些方法,并想让他们中的一些默认的具体实现,请选择抽象类;

    若想实现多重继承,请使用接口。java子类不能继承多个类,但可以实现多个接口,即用接口来。

    若基本功能需要不断变化,请选择抽象类,若使用接口的话,每次变更都需要改变实现该接口的所有类。

    4 JDK8的变化

    JDK8中,Oracle引入默认方法和静态方法,用来减少抽象类和接口的差异。

    在接口中,可提供默认的实现方法,并实现接口的类不用强制去实现这个方法。由于默认方法不是abstract,所以可以重写,也可以不重写。

    在接口中,静态方法只能通过接口名直接调用。

  • 相关阅读:
    2013上半年中国CRM市场分析报告
    windows运行命令大全
    JVM探索(二)
    JVM探索(一)
    1.数据结构和算法的基础笔记
    java程序性能优化
    http状态码
    mongodb清洗数据
    List的数据结构
    Foundation Data Structure
  • 原文地址:https://www.cnblogs.com/gwzz/p/15167116.html
Copyright © 2011-2022 走看看