Java抽象类和接口的区别

一、抽象类

当一个类中没有包含足够的信息以描绘一个具体的对象时,这样的类就是抽象类;“抽象类”是用关键字 abstract 修饰的,抽象类中有一种特殊方法,即用abstract 关键字来修饰的方法,这些方法被称为“抽象方法”

特点如下:

  1. abstract修饰的类叫做抽象类,abstract修饰的方法叫做抽象方法
  2. abstract修饰的抽象方法不需要在抽象类当中实现但是必须在子类当中重写并实现,前提是子类不是抽象类(如果不想实现抽象类中的抽象方法,那么该此子类必须是个抽象类
  3. 抽象类一定是父类,因为抽象方法需要子类去重写实现
  4. 只有抽象类当中才能有抽象方法,普通类当中不能有抽象方法
  5. 抽象类当中不一定非要写抽象方法,也可以写普通方法
  6. 抽象类不能被实例化(不能被创建对象),但是可以使用多态
  7. final和abstract不能同时使用,final修饰的类不能被继承,只能使用多态
  8. abstract修饰的方法不能被static修饰,static是针对类层次,抽象方法是针对对象层次的,所以不能一起使用
  9. 抽象方法不能使用private访问修饰符修饰,private修饰的方法是子类不可见的, 而abstract修饰的方法要求重写,二者冲突
  10. 抽象类是有构造器的,但是它的构造器不能创建对象,目的是为了完成一些必要的初始化操作

注:构造器的作用是构建对象的同时赋初始值,但抽象类的构造器只能进行初始化操作而不能进行创建对象

二、接口

接口是特殊的抽象类,类与类是继承extends,类与接口是实现implements,其实都是继承

特点如下:

  1. 接口是一种“引用数据类型”,完全抽象的,支持多继承,且一个接口可以继承多个接口,只有常量+抽象方法
  2. 所有的元素都是public修饰的,抽象方法的public abstract可以省略,常量的public static final可以省略,方法不能有方法体

三、抽象类和接口的联系与区别

接口抽象类
联系

1、都不能被实例化

2、都位于继承树的顶端,用于被其他类实现和继承

3、都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法

区别只包含抽象方法、静态方法和默认方法,不能为普通方法提供方法实现完全包含普通方法
只能定义静态常量,不能定义普通成员变量既可以定义普通成员变量,也可以定义静态常量
不能包含构造器可以包含构造器(让抽象类的子类用这些构造器来完成属于抽象类的初始化操作)
不能包含初始化块可以包含初始化代码块
多实现单继承,包括抽象类

两者的应用场景:

  • 关系密切:多个功能的集成部分,可用抽象类(抽象类提供简单方法)
  • 关系不密切:不相关的类提供公共部分,可用接口
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值