文档详情

【Java基础】接口和抽象类之间的对比.docx

发布:2021-10-31约2.98千字共7页下载文档
文本预览下载声明
PAGE PAGE 1 【Java基础】接口和抽象类之间的对比 【Java基础】接口和抽象类之间的对照 Java 中的接口和抽象类之间的对照 一、接口 Interface,将其翻译成插座可能就更好理解了。我们通常利用接口来定义实现类的行为,当你将插座上衔接笔记本的三角插头拔掉,换成微波炉插上去的时候,你就会发觉,这两样东西它都是三角插头的。那么这个三角插头就可以视为一种规章,而这两样电器就是两个实现了同样规章的构件了。由于实现了同样的规章,使得动态地将一个构件换成另外一个构件变得简单得多。那么在代码中也是相同地道理,当两个类实现了相同的接口,将客户端中原有实现类换成另外一个,就变得容易不过了。 首先,定义一个接口的代码如下: [public] interface InterfaceName { void fun1(); } 接口中可以拥有变量和办法,但是接口中定义的变量会被隐式默认为 public static final 变量,并且也只能是这样,假如你用法其他的修饰符修饰,编译时会报错。同样的,办法也会默认被 public abstract 修饰。但是,你只能定义一个办法,而不能有办法的实现类,接口中的办法只能是抽象办法,这一点就和抽象类不同了(抽象类可以有办法实现)。 而接口对应实现类的实例代码如下 public class ClassName implements InterfaceName, OtherInterface, [...] { public void fun1() { // do something ... } } 在 Java 中,类是单继承的,但是却可以继承多个接口,而接口可以继承多个接口。 二、抽象类 在 Java 语言中,类有两种:一种是详细类,另一种是抽象类。详细类可以实例化,抽象类不行以实例化。所以在这里可以想到,抽象类创建出来,就是用来被继承的,究竟你不能用一个无法实例化的类来为你完成什么功能(固然这里不包括静态变量和办法的调用,但是假如只是用来做这些,那你为什么要把这个类声明为抽象类呢?) 在了解抽象类之前,我们先了解抽象办法:抽象办法是一种特别的办法,它惟独声明,而没有详细的实现: abstract void fun1(); 在抽类中的定义的抽象办法必需用法 absract 关键字修饰,同样抽象类也需要被 abstract 关键字修饰 [public] abstract class AbstractClassName { abstract void fun1(); } 假如一个类继承了抽象类,那么子类就必需要实现抽象类中定义的全部抽象办法,除非将子类也定义为抽象类。 三、对照 语法功能上的对照 接口只能包含抽象办法,而抽象类即可有一般办法,也能有抽象办法 接口不包含构造办法,抽象类中可以包含构造办法以备继承类扩充 接口中不能含有静态代码块以及静态办法,而抽象类可以有静态代码块和静态办法 接口只能定义静态常量属性,抽象类既可以定义一般属性,也可以定义静态常量属性 设计思想上的对照 我们口头上常说:实现一个接口,继承一个抽象类。其实这句话就已经将接口和抽象类之间的区分表现出来了。 接口更多的是被视为一种契约,契约里的办法是让你来实现的。当别人给定你一个接口,你就按接口中定义的办法去实现,那么就是在实现一份契约了。所以接口是其实是一些办法特征的集合,这些办法特征固然来自于详细办法,但是它们普通都是来自于一些在系统中不断浮现的办法。一个接口惟独办法的特征,而没有办法的实现,因此这些办法在不同的地方被实现的时候,可以具有不同的行为。 而抽象类更多的是被视为一个模板,它提供的是一个继承的动身点,是子类中的共有部分的集中实现。所以抽象类是一种模板式的设计,什么是模板式设计?最容易例子,大家都用过 ppt 里面的模板,假如用模板A设计了 ppt B和 ppt C,ppt B 和 ppt C 公共的部分就是模板A了,假如它们的公共部分需要改动,则只需要改动模板A就可以了,不需要重新对 ppt B 和 ppt C 举行改动。也就是说对于抽象类,假如需要添加新的办法,可以挺直在抽象类中添加详细的实现,子类可以不举行变更;而对于接口则不可,假如接口举行了变更,则全部实现这个接口的类都必需举行相应的改动。 四、继承复用与规范实现之间的挑选 接口是一种特别的抽象类,那么在开发中,何时
显示全部
相似文档