一、你选择使用接口和抽象类的依据是什么?
当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。
二、接口和抽象类的概念不一样:
接口是对动作的抽象,表示这个对象能做什么,对类的局部行为进行抽象。
抽象类是对根源的抽象,表示这个类是什么,对类的整体进行抽象,对一类事物的抽象描述。
(
比如,男人,女人,这两个类(如果是类的话……),他们的抽象类是人。说明,他们都是人。
人可以吃东西,狗也可以吃东西,你可以把“吃东西”定义成一个接口,然后让这些类去实现它.
)
所以,在高级语言上,一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)。
三、特点和区别:
抽象类特点:
1、抽象类绝对不能被实例化
2、如果类中有一个抽象方法,那么该类就必须定义为抽象类;但反过来,抽象类里并不一定要有抽象方法。另外,抽象类里也可以有普通方法
3、抽象方法不能有方法体。即abstract function abc();------后面不能加大括号
4、一个类继承了某个抽象类,那么,它必须实现抽象类中所有的抽象方法(除非,它将方法声明为抽象的,相当于抽象类继承了抽象类)。
接口的特点:
(1)使用接口(interface),那么实现这个接口的类就必须实现这个接口中定义的全部方法,接口中的方法不需要定义方法的具体内容,即,没有方法体。
(2) 接口可以定义常量,但不能定义成员属性,常量的定义和用法和类中常量一样。
(3) 类可以实现多个接口(用逗号隔开)
区别:
1、接口中不可以声明成员变量(包括类静态变量),但是可以声明类常量。抽象类中可以声明各种类型成员变量,实现数据的封装。
2、接口没有构造函数,抽象类可以有构造函数。