(十二)接口 (以及与抽象类的区别)

接口

主要用来描述类具有什么功能,而不给出具体实现。

一个类可以实现多个接口。实现接口的类必须实现接口的所有方法。

接口可以定义任意类型的常量,但不能定义变量(实例域)。实现接口的类中可以访问接口定义的常量,但不能更改这些常量(static)。

接口不能实现方法。

接口和抽象类的区别

1、相同点

A. 两者都不能实例化。

B. interface实现类及abstrct class的子类都必须要实现已经声明的抽象方法。

2.、不同点

A. interface需要实现,要用implements,而abstract class需要继承,要用extends。

B. 一个类可以实现多个interface,但一个类只能继承一个abstract class。

C. interface强调特定功能的实现,而abstract class强调所属关系。

D. 尽管interface实现类及abstrct class的子类都必须要实现相应的抽象方法,但实现的形式不同。interface中的每一个方法都是抽象方法,都只是声明的(declaration, 没有方法体),实现类必须要实现。而abstract class的子类可以有选择地实现。

这个选择有两点含义:

一是Abastract class中并非所有的方法都是抽象的,只有那些冠有abstract的方法才是抽象的,子类必须实现。那些没有abstract的方法,在Abstrct class中必须定义方法体。

二是abstract class的子类在继承它时,对非抽象方法既可以直接继承,也可以覆盖;而对抽象方法,可以选择实现,也可以通过再次声明其方法为抽象的方式,无需实现,留给其子类来实现,但此类必须也声明为抽象类。既是抽象类,当然也不能实例化。

E. abstract class是interface与Class的中介。

interface是完全抽象的,只能声明方法,而且只能声明pulic的方法,不能声明private及protected的方法,不能定义方法体,也不能声明实例变量。然而,interface却可以声明常量变量,并且在JDK中不难找出这种例子。但将常量变量放在interface中违背了其作为接口的作用而存在的宗旨,也混淆了interface与类的不同价值。如果的确需要,可以将其放在相应的abstract class或Class中。

abstract class在interface及Class中起到了承上启下的作用。一方面,abstract class是抽象的,可以声明抽象方法,以规范子类必须实现的功能;另一方面,它又可以定义缺省的方法体,供子类直接使用或覆盖。另外,它还可以定义自己的实例变量,以供子类通过继承来使用。

3、interface的应用场合

A. 类与类之前需要特定的接口进行协调,而不在乎其如何实现。

B. 作为能够实现特定功能的标识存在,也可以是什么接口方法都没有的纯粹标识。

C. 需要将一组类视为单一的类,而调用者只通过接口来与这组类发生联系。

D. 需要实现特定的多项功能,而这些功能之间可能完全没有任何联系。

4、abstract class的应用场合

一句话,在既需要统一的接口,又需要实例变量或缺省的方法的情况下,就可以使用它。最常见的有:

A. 定义了一组接口,但又不想强迫每个实现类都必须实现所有的接口。可以用abstract class定义一组方法体,甚至可以是空方法体,然后由子类选择自己所感兴趣的方法来覆盖。

B. 某些场合下,只靠纯粹的接口不能满足类与类之间的协调,还必需类中表示状态的变量来区别不同的关系。abstract的中介作用可以很好地满足这一点。

C. 规范了一组相互协调的方法,其中一些方法是共同的,与状态无关的,可以共享的,无需子类分别实现;而另一些方法却需要各个子类根据自己特定的状态来实现特定的功能

时间: 2024-10-13 23:51:50

(十二)接口 (以及与抽象类的区别)的相关文章

第十二章 多态性与抽象类

第十二章 多态与虚函数 一.多态的概念 向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为 具有不同功能的函数名可以用同一个函数名,以实现用一个函数名调用不同内容的函数 *静态多态和动态多态(编译时的多态性和运行时的多态性) 静态多态的特点:调用速率快.效率高,但缺少灵活性,在程序运行前就已经决定了执行的函数和方法 动态多态的特点:不在编译时确定调用的是哪个函数,只有在程序运行时才动态确定操作所针对的对象.动态多态是通过虚函数实现的. 二.利用虚函数实现动态多态性 *虚函数的作用 函

(十二)sendRedirect()和forward()方法的区别

httpServletResponse接口的sendRedirect()方法和RequestDispatcher接口的forward()方法都可以利用另外的资源(Servlet.JSP页面或HTLM文件)来为客户端进行服务,但是这两种方法有着本质上的区别. 下面分别给出了sendRedirectt()方法和forward()方法的工作原理图,如图所示. sendRedirect()方法的工作原理图 交互过程如下: ① 浏览器访问Servlet1. ② Servlet1想让Servlet2为客户端

MVC小系列(十二)【RenderAction和RenderPartial区别】

二者作用:RenderAction:渲染分部视图到页面上,要求提供Action和控制器名称RenderPartial:渲染分部视图到页面上,要求提供分部视图的名称,即路径,如果是在当前控制下或者shared下的页面,可以直接写名称即可 区别:RenderAction:通过控制器在aciton,即HttpGet特性RenderPartial:不通过控制器和aciton,即使有也不走这个,一般使用RenderPartial时,都是把数据写在页面上, 注意:如果有多个视图中的表单分别有提交动作,必须使

类,抽象基类,接口类三者间的区别与联系(C++)

联系很明显,三个都是‘类’,如果读者对类的概念不清楚,可以参照wid的博文http://www.cnblogs.com/mr-wid/archive/2013/02/18/2916309.html. 下面着重解释一下区别,但此文仅是个人理解,如果觉得我说的不对的地方,还请赐教. (1)结构上的区别: 普通类:数据+方法+实现 抽象类:数据+方法(一定包含虚方法n>=1)+部分方法的实现 接口类:方法(纯虚方法) (2)概念上的区别: 普通的类和另外两个的区别很明显,普通类就是猫狗之类的,而抽象类

python 接口类、抽象类、多态

参考https://www.cnblogs.com/Fantac/p/11481114.html 接口类和抽象类总结 在python中没有接口类,但有抽象类;abc模块中的metaclass = ABCMeta,@abstractmethod它的本质是做代码的规范用的,希望子类中能实现父类名字完全一样的方法 接口类和抽象类: 从java的角度上看是有区别的,java本来就支持单继承所以就有了抽象类;java没有多继承,所以为了接口隔离原则,设计了接口这个概念,支持多继承了 而python它既支持

第十五节(多态,接口和抽象类的区别,类之间的关系)

多态的定义: 1. 多态是同一个行为具有多个不同表现形式或形态的能力 2. 多态性是对象多种表现形式的体现 比如我们说"宠物"这个对象,它就有很多不同的表达或实现,比如有小猫.小狗.蜥蜴等等. 那么我到宠物店说"请给我一只宠物",服务员给我小猫.小狗或者蜥蜴都可以,我们就说"宠物" 这个对象就具备多态性. 多态的条件是:有继承或实现,有方法覆盖或实现,父类对象(接口) 指向子类对象 public class Animal{ // 成员方法 pub

JAVA基础(十二)抽象类与接口

抽象类 总结:                 类支持单继承.接口支持多继承                 类与类单继承,                 类实现接口,接口继承接口,先继承后实现 自己理解  抽象类:描述笼统的,模糊,不具体的具有共性的类  抽象类格式 Public abstract class 类名{ 成员变量 //方法 public abstract 返回值类型 方法名 (参数); Public abstract void get ();//抽象函数.需要abstract修

抽象类和接口以及它们之间的区别

一.抽象类和抽象方法 abstract修饰符修饰的方法称为抽象方法,修饰的类称为抽象类. 1.抽象类和抽象方法的关系 抽象类中可以没有抽象方法,但是有抽象方法的类一定要申明为抽象类. 2.语法 public abstract class Action{     public abstract void doSomething(); } 对于一个普通方法public void doSomething(){...}来说, public void doSomething()这一部分是方法的申明 {..

2.35 Java基础总结①抽象②接口③设计抽象类和接口的原则④接口和抽象类的区别

java基础总结①抽象②接口③设计抽象类和接口的原则④接口和抽象类的区别 一.抽象 abstract作用:不能产生对象,充当父类,强制子类正确实现重写方法和类相比仅有的改变是不能产生对象,其他的都有,包括构造.属性等等任何一个类只要有一个抽象的方法就成了抽象类 抽象方法 public abstract A();①方法是抽象的,这个类也是抽象的:②子类必须重写抽象方法,除非子类也是抽象类 抽象类可以没有抽象方法,但一般不这么设计 二.接口 interface 接口也是Java的一种引用数据类型(J