接口和抽象类的区别?

1、什么是接口Interface

  • 把一些没有实现的方法,封装到一起,等某个类用时再拿出来

  • interface接口名

  • class 类名 implements 接口

  • 接口中有3中方法:

  1. 接口中抽象方法,可省略abstract

  2. jdk8以后接口中可以有默认实现方法,但要用default修饰

  3. jdk8以后接口中可以有静态方法static

2、什么是抽象类Abstract

  • 被abstract修饰的方法,叫做抽象方法。
  • 抽象类中的抽象方法,子类必须实现。这样的强制性是普通类所不具备的。
  • 两种作用:
  1. 约束定义,子类必须要实现父类的抽象方法。
  2. 基类公共封装,自身不能实例化,只能由子类来实例化,子类可以重写基类方法,也可以直接用基类方法。

3、接口Interface与抽象类Abstract的区别?

  • 接口是对动作的抽象,抽象类是对根源的抽象。

  • 当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。

  • 一般抽象类会被继承,其子类实现抽象方法

  • 接口可以被多重实现(implements),抽象类只能被单一继承(extends)

  • 实现(implements) : 一个类实现一个接口的关键字,实现一个接口,必须实现接口中的所有抽象方法。

1)接口不能有构造方法,抽象类可以有。

2)接口不能有方法体,抽象类可以有。

3)接口不能有静态方法,抽象类可以有。

4)接口多继承,抽象类单继承

5)接口--- 实现implement的方式,
抽象类 --- 继承extends的方式,
实现类(普通类、抽象类) ---> 实现接口

6)区别:

  1. 抽象类可以有抽象方法,只需要声明,无需实现;抽象方法不能声明为静态的,不能被static、final修饰;

  2. 接口里的方法都是抽象方法,但是都只是声明,并没有方法体;

  3. 抽象类里面可以变量,变量可以私有化;
    接口里没有成员变量(被final修饰为常量)只有常量,不能被私有化,只能是公开的;

  4. 抽象类可以有构造方法,接口中不能有构造方法;

  5. 抽象类中抽象方法的访问类型可以是public,protected,但接口中抽象方法的访问类型只能是public,并且默认为public abstract(省略则自动默认补全)

  6. 抽象类中可以有静态方法,接口中不能有静态方法。

  7. 默认的修饰符不同:

    类当中的默认的修饰符是访问权限修饰符 default

    接口中的方法的默认修饰符public abstract

    接口中的属性的默认修饰符public static final

  8. 成员不同:

    类中可以存在所有的类的成员

    接口中没有构造代码块、构造方法、静态代码块

  9. 继承规则不同:

    抽象类遵循类的继承规则- - 单继承

    接口遵循接口的继承规则- - 多实现

  10. 使用方式:

    抽象类 需要通过继承的方式,使用普通子类完成实例化操作(普通子类只能继承一个抽象类)

    接口 需要通过实现的方式,使用普通的实现类完成接口的使用(普通实现类可以同事实现多个接口)

  • 一个类可以实现多个接口,但最多只能继承一个抽象类

  • 一个类实现接口的话要实现接口的所有方法,而抽象类不一定

  • 接口不能用 new 实例化,但可以声明,但是必须引用一个实现该接口的对象

联系:

  • 都是引用数据类型

  • 都无法独立实例化

表面看,接口是一种特殊的抽象类,但类是类,接口是接口,是并列的关系,

设计层面看,抽象类是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。

4、接口中可以有哪些方法?

  1. 抽象方法
  2. 常量
  3. 默认方法(JDK8)
  4. 静态方法(JDK8)
  5. 私有方法(JDK9)

posted @ 2022-11-23 10:18  Rix里克斯  阅读(154)  评论(0)    收藏  举报