Java 中接口和抽象类的区别?

眉间皱痕 提交于 2020-02-27 01:43:28

抽象类

  1. 如果一个类含有抽象方法,那么这个类是抽象类。
  2. 抽象类用 abstract 修饰。
  3. 抽象类可以没有抽象方法。
  4. 抽象方法必须被 publicprotected 修饰。如果被 private 修饰,则方法不能被子类继承。默认情况下为 public
  5. 如果一个类继承了抽象类,那么需要实现抽象类中的所有抽象方法。如果没有实现所有抽象方法,那么该子类也被定义为抽象类。
  6. 因为含有抽象方法,没有具体实现的方法,所以抽象类不能实例化对象。

接口

  1. 接口中的所有方法必须都是抽象方法。(Java8 可以有默认方法实现)
  2. 接口用 interface 修饰。
  3. 接口中的变量被隐式指定为 public static final 变量,并且也只能被 public static final 修饰,如果被 privateprotected 修饰会报编译错误。
  4. 接口中的方法被隐式指定为 public abstract 方法,并且也只能被 public abstract 修饰。如果被 privateprotectedfinalstatic 等修饰会报编译错误。

接口与抽象类的区别

  1. 抽象类被继承,且只能单继承;接口被实现,可以实现多个接口。
  2. 抽象类中,可以有自己的变量,也可以有非抽象的方法;接口中的变量必须是 public static final 修饰,所有成员方法必须都是抽象的。(Java8 可以有默认方法实现)
  3. 继承抽象类的类,抽象方法可以不实现,但该子类也必须是抽象的;实现接口的类,必须实现接口中的所有方法。(Java8 可以有默认方法实现)
  4. 抽象类中可以有非抽象方法;接口可以继承接口,且不需要实现接口中的方法;
  5. 接口中的变量只能被 public static final 修饰,且必须要有初值,所以实现类中不能重新定义,也不能改变其值。
  6. 接口中的方法必须是 public abstract 修饰,也只能被 public abstract 修饰。接口不允许有 static 方法,但抽象类允许有 static 方法。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!