抽象类

抽象类:是一种不能被实例化的类,只能作为其他类的父类来使用。
抽象类和普通类相似,都包含成员属性和成员方法。
抽象类类似于模版,规范后让子类实现详细功能(单继承)。
抽象类是通过关键词 abstract class 来声明的。

接口

接口:主要基于方法的规范,有点像抽象类里的抽象方法,只是其相对于抽象方法来说,更加独立。
可让某个类通过多个接口中的方法组合来形成新的类(多继承)。
接口是通过 interface 关键字来声明。
接口中的方法都是抽象方法,所以abstract可以省略不写,接口中的方法必须是public
接口中只能声明方法(没有方法体),不能写属性(可以写常量)。
一个类可以实现多个接口,中间用逗号隔开。
一个类可以先继承父类,然后再实现接口。
接口可以继承接口,但是里面的方法都要实现。

抽象类与接口的相同点:

1、都是用于声明某一种事物,规范名称、参数,形成模块,没有详细的实现细节。
2、都是通过类的继承来实现相关的细节工作。
3、语法上,抽象类的抽象方法与接口一样,不能有方法体,即没有{}符号
4、都可以用继承,接口可以继承接口形成新的接口,抽象类可以继承抽象类从而形成新的抽象类。

  • 抽象方法的格式是:abstract function abstractMethod();
  • 接口方法的格式是:public funciton interfaceMethod();

抽象类与接口的不同点:

1、抽象类中至少要包含一个抽象方法,抽象方法没有方法体(没有{}符号)。该方法天生就是要被子类重写的。
2、抽象类可以有属性、普通方法、抽象方法,但接口不能有属性、普通方法但可以有常量;
3、抽象类内未必有抽象方法,但接口内一定会有“抽象”方法,接口中的成员属性和方法都是public的,方法可以不写关键词public;
4、抽象类用abstract class关键字在类前声明,接口是用interface来声明,但不能用class来声明,因为接口不是类。
5、抽象类的抽象方法一定要用abstract来声明,而接口则不需要
6、抽象类和接口实现的功能十分相似,最大的不同是接口能实现多继承。抽象类是用extends关键字让子类继承父类后,在子类实现详细的抽象方法。而接口则是用implements让普通类在类里实现接口的详细方法,且接口可以一次性实现多个方法,用逗号分开各个接口即可。
7、接⼝中的⽅法默认都是public类型的,⽽抽象类中的⽅法可以使⽤private,protected,public来修饰。
8、接口没有构造函数,抽象类可以有构造函数。

使用场景

  • 如果要创建一个模型,这个模型将由一此紧密相关的对象调用,就可以使用抽象类;
  • 若创建一个模型将由一些不相关对象调用的功能,就使用接口;
  • 如果必须从多个来源继承行为,就使用接口;
  • 如果知道所有类都会共享一个公共的行为实现,就使用抽象类,并在其中实现该行为。

标签: interface,abstract

添加新评论