抽象类与接口的区别

抽象类

什么是抽象类

抽象类是对一组事物或者说某一些对象,将他们的共同特点进行总结,定义(抽象)到一个类中,这个类叫做抽象类。简单来说:对事物进行更高层级的抽象,会形成抽象类, 这种类无法具体化。如宠物类,动物类, 食品类,交通工具类。。。。
其他有这些共同特征的类可以通过继承抽象类。

抽象方法

当类的某个操作无法具体实现时, 该操作可以定义为抽象方法。含有抽象方法的类必须定义为抽象类

特点

  1. 只要使用abstract修饰的类就是抽象类,抽象类可以没有抽象方法,但含有抽象方法的类必须定义为抽象类
  2. 子类继承抽象类,必须实现抽象类的抽象方法,否则子类也要定义为抽象类
  3. 抽象类不能实例化对象,抽象类的引用(变量)需要赋值子类对象或者匿名内部类对象
  4. 抽象类虽然不能实例化对象,但是它也有构造方法,它也可以定义实例变量,实例方法,静态变量,静态方法

接口

什么是接口

接口用来对事物的功能进行扩展。
计算机上的接口,是对计算机功能的扩展:计算机实现USB接口,扩展出鼠标、键盘功能
同理,类实现接口是对类功能的扩展

特点

  1. 类实现接口,扩展接口的功能,需要重写接口的方法,否则这个类需要定义为抽象类
  2. 接口不能实例化对象,接口的引用需要赋值实现类对象或者匿名内部类对象。通过接口引用调用方法实际执行的是实现类对象的方法(这句话对动态代理的理解有帮助),这叫做接口的多态。
  3. 接口中的方法默认public abstract修饰,字段默认public static final 修饰为常量,在jdk8中,接口还可以定义static 方法和default方法,这里两个方法主要用在功能的扩展
  4. 接口支持继承,并且支持多继承
  5. 一个类在继承父类的同时可以实现多个接口,需要重写接口的抽象方法

接口的应用

  1. 接口用来封装某个功能
  2. 接口可以看做是一组操作规范
  3. 接口在某种程度上可以解决类的多继承问题

为什么提倡面向接口编程

  1. 接口使用比较灵活,一个类在继承父类的同时, 可以实现多个接口
  2. 面向接口编程可以体现面向抽象编程思想,降低类的耦合度,提高程序的可扩展性
  3. 接口可以使项目分层,实现代码的可插拔

两者的区别

相同点:

  1. 都可以定义抽象方法
  2. 都不能实例化对象

不同点:

  1. 意义不同, 接口是功能的封装,解决对象能干什么;抽象类是事物的抽象,解决对象到底是什么;如手机,电脑可以进一步抽象为电子产品类, 电脑或者手机上有3.5mm的耳机接口.
  2. 内容不同:接口包含四部分(常量、抽象方法、静态方法、default方法),抽象类包含实例变量、静态变量、实例方法、静态方法、抽象方法、构造方法
  3. 接口支持多继承,类只允许单继承
    有时候出现抽象类和接口都能解决的问题,如果仅仅是为了扩展功能,优先选择接口

类与类之间的关系

经常使用类图来描述类与类之间的关系.
类图是一咱UML图, UML(Union Modeling Language,统一建模语言)是一种图形化的建模语言, 常用的有: 用例图, 类图, 状态图, 时序图….
经常使用Rational Rose工具, Visio工具来画UML图
六个关系:继承(泛化)、实现、依赖、关联、组合、聚合

  1. 继承(泛化)
    子类继承父类, 子接口继承父接口
    在这里插入图片描述
  2. 实现
    类实现了接口
    在这里插入图片描述
  3. 依赖
    如果在A类中使用B类定义方法返回值类型,参数类型,局部变量类型,称A类依赖B类
    在这里插入图片描述
  4. 关联
    如果在A类中使用B类定义了成员变量, 称A类关联B类
    在这里插入图片描述
  5. 聚合
    聚合是关联的一种, 在A类中包含若干的B类, 但是A类不能决定B的生命周期,称A类为聚合类
    在这里插入图片描述
  6. 组合
    组合是关联的一种, 在A类中包含若干的B类, 并且A类能决定B的生命周期,称A类为组合类
    在这里插入图片描述
    补充:
    is a, 继承关系,也只有当 子类 is a 父类关系成立时才能使用继承
    like a, 实现关系
    has a, 关联关系
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值