接口和抽象类的区别?
1、什么是接口Interface
-
把一些没有实现的方法,封装到一起,等某个类用时再拿出来
-
interface接口名
-
class 类名 implements 接口
-
接口中有3中方法:
-
接口中抽象方法,可省略abstract
-
jdk8以后接口中可以有默认实现方法,但要用default修饰
-
jdk8以后接口中可以有静态方法static
2、什么是抽象类Abstract
- 被abstract修饰的方法,叫做抽象方法。
- 抽象类中的抽象方法,子类必须实现。这样的强制性是普通类所不具备的。
- 两种作用:
- 约束定义,子类必须要实现父类的抽象方法。
- 基类公共封装,自身不能实例化,只能由子类来实例化,子类可以重写基类方法,也可以直接用基类方法。
3、接口Interface与抽象类Abstract的区别?
-
接口是对动作的抽象,抽象类是对根源的抽象。
-
当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。
-
一般抽象类会被继承,其子类实现抽象方法
-
接口可以被多重实现(implements),抽象类只能被单一继承(extends)
-
实现(implements) : 一个类实现一个接口的关键字,实现一个接口,必须实现接口中的所有抽象方法。
1)接口不能有构造方法,抽象类可以有。
2)接口不能有方法体,抽象类可以有。
3)接口不能有静态方法,抽象类可以有。
4)接口多继承,抽象类单继承
5)接口--- 实现implement的方式,
抽象类 --- 继承extends的方式,
实现类(普通类、抽象类) ---> 实现接口
6)区别:
-
抽象类可以有抽象方法,只需要声明,无需实现;抽象方法不能声明为静态的,不能被static、final修饰;
-
接口里的方法都是抽象方法,但是都只是声明,并没有方法体;
-
抽象类里面可以变量,变量可以私有化;
接口里没有成员变量(被final修饰为常量)只有常量,不能被私有化,只能是公开的; -
抽象类可以有构造方法,接口中不能有构造方法;
-
抽象类中抽象方法的访问类型可以是public,protected,但接口中抽象方法的访问类型只能是public,并且默认为public abstract(省略则自动默认补全)
-
抽象类中可以有静态方法,接口中不能有静态方法。
-
默认的修饰符不同:
类当中的默认的修饰符是访问权限修饰符 default
接口中的方法的默认修饰符public abstract
接口中的属性的默认修饰符public static final
-
成员不同:
类中可以存在所有的类的成员
接口中没有构造代码块、构造方法、静态代码块
-
继承规则不同:
抽象类遵循类的继承规则- - 单继承
接口遵循接口的继承规则- - 多实现
-
使用方式:
抽象类 需要通过继承的方式,使用普通子类完成实例化操作(普通子类只能继承一个抽象类)
接口 需要通过实现的方式,使用普通的实现类完成接口的使用(普通实现类可以同事实现多个接口)
-
一个类可以实现多个接口,但最多只能继承一个抽象类
-
一个类实现接口的话要实现接口的所有方法,而抽象类不一定
-
接口不能用 new 实例化,但可以声明,但是必须引用一个实现该接口的对象
-
联系:
-
都是引用数据类型
-
都无法独立实例化
表面看,接口是一种特殊的抽象类,但类是类,接口是接口,是并列的关系,
设计层面看,抽象类是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。
4、接口中可以有哪些方法?
1. 抽象方法
2. 常量
3. 默认方法(JDK8)
4. 静态方法(JDK8)
5. 私有方法(JDK9)
本文作者:Ritchie里其
本文链接:https://www.cnblogs.com/wang-zeyu/p/16917441.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步