抽象类

定义抽象类用关键字:abstract,继承抽象类用关键字:extend
抽象类是至少具有一个抽象方法的类。继承抽象类的类需要实现抽象方法。不能通过抽象类创建对象,需要通过抽象类的继承类来创建对象。
特性

  1. 抽象类不能被实例化。一个类中至少有一个抽象方法,那么这个类就必须声明为抽象类;
  2. 抽象类中可以没有抽象方法,但是抽象方法必须是空方法;
  3. 继承抽象类,子类必须重写父类的抽象方法,访问控制必须和父类一样或者比父类宽松;
  4. 抽象类可以继承抽象类,但不能重写父类的抽象方法,可以理解为父类的扩展;
  5. 抽象类中可以有成员变量。

    接口类

    定义接口类用关键字:interface,继承接口类用关键字:implements
    对方法的抽象叫做接口。通俗点说,就是接口内的方法必须都是抽象方法。
    特性

  6. 接口不能实例话,接口中的方法必须都是抽象方法;

  7. 接口中的方法必须是公共的;
  8. 接口中没有成员变量。

    两者的区别

    相同点

  9. 两者都是抽象类,都不能直接实例化;

  10. 继承时,子类都必须重写父类的抽象方法。

    不同点

  11. 定义和继承用的关键字不同;

  12. 一个类可以实现多个接口,但一个类只能继承一个抽象类;
  13. 接口强调的时特定功能的实现,抽象类强调的时所属关系;
  14. 接口中方法的修饰符默认也必须时public,抽象类中的方法可以用public、protected、不能用 private;
  15. 接口中的抽象方法前不用也不能加 abstract 修饰,默认隐式就是抽象方法,也不能用 final 关键字来防止子类实现。抽象类中的凑下方法前必须加 abstract 表示显示声明为抽象方法。
  16. 接口中的每个方法都没有方法体,实现类必须实现。抽象类中,子类要么完成重写父类的抽象方法,要么自己定义未抽象类。