(十五)抽象类与接口有什么异同

抽象类和接口都是支持抽象类定义的两种机制

一、抽象类

①包含抽象方法的类,必须声明为抽象类,抽象类中可以包含非抽象方法

②抽象可以是抽象方法、抽象类,但不能是抽象属性

③抽象类在使用的过程中不能被实例化,但是可以创建一个对象使其指向子类的一个实例

这已经很熟悉了,Person child=new Child();

④抽象类的子类若实现所有的抽象方法,则为非抽象类,否则还是抽象类

二、接口

①可以看成抽象类的变体,所有方法都是抽象的,可以通过接口实现多重继承

②变量都是static final类型

三、接口与抽象类的相同点

①都不能被实例化(接口不能创建对象,抽象类可以创建指向子类的对象)

②接口的实现类或抽象类的子类都只有实现了接口或抽象类中的方法才能被实例化

四、接口与抽象类的不同点

方法实现:接口只有定义,其方法不能在接口中实现,只有实现接口的类才能实现接口中定义的方法;

抽象类可以有定义与实现,即其方法可以在抽象类中被实现

设计理念:接口强调特定功能的实现,“has-a”关系;抽象类强调所属关系,“is-a”关系

多继承:接口需要实现(implements),但抽象类只能被继承(extends)。一个类可以实现多个接口,但一个类只能继承一个抽象类

④接口中定义的成员变量默认为public static final,必须赋值,方法都是public、abstract,只能被这两个关键字修饰

抽象类的成员变量任意修饰符(但不能为abstract),在子类中可以重新定义,抽象类中的抽象方法不能用private、static、synchronized、native等访问修饰符修饰

五、什么时候使用抽象类和接口

  • 如果你拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类吧。
  • 如果你想实现多重继承,那么你必须使用接口。由于Java不支持多继承,子类不能够继承多个类,但可以实现多个接口。因此你就可以使用接口来解决它。
  • 如果基本功能在不断改变,那么就需要使用抽象类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类。
posted @ 2019-02-15 22:15  测试开发分享站  阅读(133)  评论(0编辑  收藏  举报