抽象类(abstract)和接口(interface)的区别

发布时间 2023-10-09 17:51:15作者: 杂音77

抽象类(abstract)和接口(interface)的区别

抽象类(abstract)

  • 只有方法名和参数,没有方法体
  • 抽象方法一般存在于抽象类中
    1. 有抽象方法的一定是抽象类
    2. 抽象类里不一定有抽象方法
    3. 抽象类被别的类继承(继承只能单继承),子类一定要重写抽象类中的抽象方法,如果子类也是抽象类则不用重写
    4. 抽象方法不能被static、final修饰,因为它需要被重写
    5. 不能被实例化,即不能new一个对象

接口(interface)

  • 用interface修饰,只有抽象方法和常量和引用数组类型
  • 接口可以被多实现(通俗说就是可以多继承)
  • 不能被实例化,即不能new一个对象
  • 接口中只能有抽象方法,没有构造方法
  • 接口里面只能有常量,并且不能私有化,默认是public static final型,且必须初始化,实现类中不能重新定义和修改值
  • 接口可以被接口继承 ,可以是多继承(先继承再实现)

抽象类和接口的区别

1.抽象类和接口都不能被实例化;

2.抽象类使用abstract修饰,接口用Interface修饰;

3.抽象类是单继承,一个类只能使用一次继承关系,继承用关键字extends;

接口可以多继承(extends)多实现(interface),多实现的时候用逗号(,)隔开;

4.抽象类里面可以有变量,变量可以私有化;

接口里只有常量,默认是public static final,不能被私有化,只能是公开的(public);

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

接口里的方法都是抽象方法,但是都只是声明,并没有方法体,而且没有构造方法;

6.抽象类里面可以包含抽象方法和非抽象方法,抽象方法没有方法体,但是普通方法里面有方法体;有抽象方法的一定是抽象类,抽象类里不一定有抽象方法;一个类继承了抽象类,如果这个类实现了抽象类里面的所有抽象方法,那么该类可以不是抽象类,但是如果没有实现所有的抽象方法,那该类是抽象类