Java -8 抽象类 和 接口

抽象类

  • 用修饰符"abstract" 修饰的类称为抽象类, 用修饰符 "abstract" 修饰的方法称为抽象方法.抽象类不能实例化,既不能创建对象.抽象方法只能声明,而没有实现.
  • 抽象类必须被继承,定义一个不被继承的抽象类是没有意义的.
  • 一个类如果声明了抽象方法,则这个类必须被定义为抽象类.但是一个抽象类中并不要求必须有抽象方法.
  • 一个子类继承父类,那么这个子类就继承了父类中定义的成员变量和成员方法.如果这个父类是一个定义了抽象方法的抽象类,那么这个子类自然就继承了父类中定义的抽象方法,所以这个子类也必须是抽象类,除非这个子类实现了父类中所有的抽象方法.

接口

  • 在软件工程中,接口泛指供别人调用的方法或者函数.在Java语言中,接口是对行为的抽象,是方法声明的集合.
  • 定义一个接口,从语义上理解,就是定义一个"能够做某些事"的行为特征,或者说功能集合.要注意的是,在接口中只能定义"能够做某些事",而不能定义"如何做这些事"
  • 用关键字 "interface" 来定义一个接口,接口中只能定义抽象方法和静态成员常量.
  • 接口中定义的抽象方法和静态成员常量都是默认是public 的,也必须是public的
  • 接口中不能定义静态代码块,所以静态成员常量必须在定义时就赋初值.
  • 使用关键字"implements" 来定义一个类实现一个接口,就是指这个类继承了这个接口中定义的抽象方法和静态成员常量,也就是说,如果这个类不想被定义为抽象类,那么这个类就要实现接口中所定义的所有的抽象方法.

对于接口的定义和实现,注意以下几点:

  • 一个接口中只能定义抽象方法和静态成员常量.
  • "实现接口"的概念类似于"继承父类",一个类只能继承一个父类(单继承),但是一个类可以实现多个接口.而且一个类在继承一个父类的同时,也能实现多个接口.
  • 一个类实现接口,如果这个类不想被定义为抽象类,那么这个类就要实现接口中所定义的所有的抽象方法.

抽象类和接口的不同

  • 抽象类可以定义抽象方法,也可以定义具体实现的方法;而接口中只能定义公共的抽象方法
  • 抽象类中定义的属性可以是各种类型的变量或者常量;而接口中定义的属性只能是公共的静态常量
  • 抽象类中可以定义静态代码块和静态方法;而接口中不能定义静态代码块和静态方法
  • 一个类只能继承一个抽象类;而一个类却可以实现多个接口
  • 抽象类是对一类事物的抽象,包含事物的共有属性\具体行为和抽象行为;而接口只是某种行为特性的抽象,只包含抽象行为

猜你喜欢

转载自www.cnblogs.com/technicist/p/13394044.html
今日推荐