接口与抽象类的区别与联系 2016年12月13日

1、如果要创建不带任何方法和成员变量的基类,应该选择接口而不是抽象类。

2、接口可以实现多继承。

3、接口和抽象类的区别与联系:

  1)接口和抽象类都不能实例化,若要被实例化,要有子类继承抽象类且实现抽象类中的所有方法,再利用多态——父类引用指向子类对象实现实例化;接口变量必须指向实现接口所有方法的类对象。

  2)抽象类中定义的方法不一定是抽象方法,但是接口中定义的方法都是抽象方法。

  3)抽象类可以被继承extends,子类要实现抽象类中定义的所有方法,否则子类将无法被实例化,如果子类没有实现全部父类抽象方法,那么子类只能是抽象类;接口可以被实现implements,同样接口中定义的方法也都要被实现,这就体现了专用接口优于单一接口,专用接口避免了所有方法在同一接口中,有些类不能实现。

  4)抽象方法只能声明,不能实现,但是抽象方法是要被子类实现的,派生类必须覆盖基类中的抽象方法,因此抽象方法不能是静态的,也不能是私有的。例如:

abstract function fun1();
abstract function fun2();

  5)接口里定义的变量只能是公共的静态的常量抽象类中的变量是普通变量

  6)接口只能做方法声明,抽象类中可以做方法声明,也可以做方法实现。

  7)当关注一个事物本质的时候,用抽象类;当关注一个操作的时候,用接口。例如:抽象类表示的是这个对象是什么。接口表示的是这个对象能做什么。比如,男人,女人,这两个类,他们的抽象类是人。人可以吃东西,狗也可以吃东西,可以把“吃东西”定义成一个接口,然后让这些类去实现它。

  8)接口可继承接口,并可以多继承接口,并且类可以实现多个接口,但类只能单根继承。

4、接口的实现方法必须是public的原因:

  首先,接口的默认方法都是public类型的,如果不是public类型的,那么这个接口只能在同包的类中实现,其访问权限就降低了很多,而且实现类相当于子类,子类的访问权限不能小于父类,因此实现类的方法必须用public类型的。

posted @ 2016-12-09 21:39  奋斗的蜗牛cn  阅读(119)  评论(0编辑  收藏  举报