Java学习笔记(七)--抽象类和接口的异同

一、什么是抽象类

       抽象类是更高层次的抽象,抽象类和抽象方法都需要使用abstract关键字修饰,类中方法是用来描述类的行为的,但有时候我们只有在运行期间才能确定确切的描述方式,这时候就需要用到抽象类。有抽象方法的类只能定义成抽象类,抽象类中可以没有抽象方法。

       抽象方法和抽象类的规则如下:

  • 抽象类和抽象方法必须使用abstract关键字修饰,抽象方法不能有方法体
  • 抽象类不能实例化.只能用来继承
  • 抽象类的构造函数不是用来实例化的,而是子类调用来初始化抽象类的
  • 含有抽象方法的类只能被定义成抽象类

二、什么是接口

      接口是一种规范,接口规定了必须向外提供哪些服务

三、两者相同之处

  • 接口和抽象类都不可被实例化
  • 接口和抽象类中都可包含抽象方法,实现接口或继承抽象类的子类必须实现抽象方法

四、两者不同之处

  • 接口是一种规范,接口规定了实现者必须向外提供哪些服务
  • 接口不能经常改变,否则会影响整个系统
  • 接口中只能包含抽象方法和默认方法,而抽象类中可以包含普通方法
  • 接口中不能定义静态方法,抽象类中可以定义静态方法
  • 接口中只能定义静态常量,不可以定义普通成员变量,抽象类中可以定义静态常量也可以定义普通成员变量
  • 接口中不能包含构造器,抽象类中包含构造器,该构造器并不是实例化抽象类,而是让子类调用构造器完成抽象类的初始化
  • 接口中不能包含初始化块,抽象类可以包含初始化块
  • 一个类只可以有一个直接父类,但是可以实现多个接口

五、总结

      接口是一种规范,抽象类是一种更高层次的抽象。抽象类中可以包括普通类实现,接口中不能包括普通类实现。

猜你喜欢

转载自blog.csdn.net/zh15732621679/article/details/79655739