`

Interface和抽象类的应用

阅读更多

一个类可以(继承)实现多个接口,但只能继承一个类。接口中只能定义方法名,方法参数和返回值,以及静态变量。抽象类中可以有方法的实现,也可以定义非静态的类变量。

所以,当你需要多继承特性时,那你只能使用接口;当你需要在父类中实现部分代码(通用功能)而根据不同情况某一方法有不同的实现时,那就设计为抽象类。
     
我们也可以从多态性的角度来考虑是要使用接口还是用抽象类。如果预计要创建组件的多个版本,我们应该创建抽象类。这是因为,抽象类提供简单易行的方法来控制组件版本。通过更新基类,所有继承类都随更改自动更新。另一方面,接口一旦创建就不能更改。如果需要接口的新版本,必须创建一个全新的接口。所以,如果创建的功能将在大范围的全异对象间使用,则使用接口


抽象类主要用于关系密切的对象,而接口最适合为不相关的类提供通用功能。


       一个基本原则是,首先考虑使用接口。接口可以继承接口。抽象类可以实现(implements)接口,抽象类是可以继承实体类,但前提是实体类必须有明确的构造函数。有个通用的设计思想,如果要设计小而简练的功能块,则使用接口。如果要设计大的功能单元,则使用抽象类。


     接口一旦被定义和接受,就必须保持不变,以保护为使用该接口而编写的应用程序。接口发布后,就不能对其进行更改。这是我们进行组件设计的一个重要原则,叫做‘接口不变性’。创建一个接口就是在创建一个定义,接口定义发布后则永远不能更改。接口不变性,就是为了保护为使用接口而编写的现有系统。当接口设计与需求有所出入,确认需要大幅度变更时,我们应该创建新的接口。一般命名方式是,新接口可以通过在原来的接口名称后追加一个数字‘2’来命名,以显示出它与现有接口的关系。


     一般来说,我们会把确定哪些属性和方法属于接口的设计过程称为‘接口分解’。基本准则是,应在一个接口中将紧密相关的几个功能聚合为一组。功能太多会使接口不便于运行,而过于细分功能将导致额外的系统开销并降低使用的简易性。掌握分解的这个度的能力是需要不断的在技术上进行磨炼,以及在对每个项目深入分析与理解的基础上才能得到的。

 

     接口是一种非常有效的编程方法,它让对象的定义与实现分离,从而可以在不破坏现有应用程序的情况下使对象得以完善与进化。接口消除了实现继承的一个大问题,就是在对设计实施后再对其进行更改时很可能对代码产生破坏。即使实现继承允许类从基类继承实现,在类首次发布时仍然会使我们不得不为设计做很多的抉择。如果原有的设想不正确,并非总可以在以后的版本中对代码进行安全的更改。比如,我们定义了一个基类的方法,它需要一个 Integer 参数,而后来又确定该参数应该为 Long 数据类型。我们无法安全更改原始类,因为为从原始类派生的类所设计的应用程序可能无法进行正确编译,因为它会影响几百个子类。
       办法就是发布接受新数据类型的更新接口。
使用接口继承而不用类继承的主要原因有:在应用程序要求很多可能不相关的对象类型以提供某种功能的情况下,用接口适用性会更强;接口比基类更灵活,因为可以定义单个实现来实现多个接口;在无需从基类继承实现的情况下,接口更好;在无法使用类继承的情况下接口是很有用的。例如,结构无法从类继承,但它们可以实现接口。”


当你在使用inerface时,一定是用的implements里的方法,而且经常这么用。List l = new ArrayList() ; List是接口,ArrayList是它的实现。这后还很有可能有个方法是这样的 public void m1(List l){...}.这里写List是让这个方法更通用些,只要是List 的实现就能用。例如做网通的透明数据库编程时,就是这么用的,在program.cs这个文件中,为了让所有数据库都通用,借用了系统提供的各种接口,如IDbconnection,IDbcommand等等,根据用户所选数据库的不同,接口有了不同的实现方法,如果选的是sqlserver数据库,则 IDbconnection conn=new SqlConnection(connstr);IDbcommand cmd=new SqlCommand(conn);执行访问数据库的一些方法时,如ExecuteQuery(IDbcommand cmd);方法的参数就是接口,将上面的cmd传进来就实现了对sqlserver数据库的访问。

 

分享到:
评论

相关推荐

    接口和抽象类的区别(面向对象)

    抽象类一般作为公共的父类为子类的扩展提供基础,这里的扩展包括了属性上和行为上的。而接口一般来说不考虑属性,只考虑方法,使得子类可以自由的填补或者扩展接口所定义的方法,就像JAVA王子所说的事件中的适配器...

    Java语言提供的一种接口(interface)机制

    Java语言提供了一种接口(interface)机制。...你可以把一个接口看成是一个纯的抽象类。理解并用好接口机制将帮助我们更好的掌握Java这种面向对象的编程语言。本文讨论了一下接口的使用规则以及相关的应用。

    PHP中关键字interface和implements详解

    如果一个抽象类里面的所有方法都是抽象方法,且没有声明变量,而且接口里面所有的成员都是 public 权限的,那么这种特殊的抽象类就叫 接口 。 接口使用关键字 interface 来定义,并使用关键字 implements 来实现...

    c#中抽象类、接口的使用例子

    一个完整的例子: using System; using System.Collections.Generic... interface IAnimal //顶层接口 { void eating(); //接口中声明的方法,这里不可以用static,abstract修饰 } abstract class Bird :IAnima

    Java学习路线:day15

    文章目录第四章 面向对象(下)抽象类与抽象方法抽象类应用练习创建抽象类的匿名子类对象多态的应用:模板方法设计模式(TemplateMethod)抽象类的练习接口(interface)概述举例接口的应用:代理模式(Proxy)接口的应用:...

    java线程图片切割与处理

    在java.awt包中,供给了专门的Image类,它是1种抽象类,可供给抽象的方法刻画图片的一些共同特征。而在Applet类和Tookit类中都供给了2种getImage()方法下载图像,分辨根据尽对地址和相对地址查询所要下载的图像。

    net学习笔记及其他代码应用

    接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类...

    java名词汇总说明文档

    J2EE Sun公司领导、多家公司共同参与制定的一个企业应用程序开发标准 标识符 赋予变量、常量、方法、...抽象类(abstract class) 仅定义了方法的部分实现,而留待扩展类去提供这些方法的部分或全部的进一步实现的特殊类

    【05-面向对象(下)】

    •接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。 接口与抽象类的区别 •接口里只能包含抽象方法,不同包含已经提供实现的方法;抽象类则完全可以包含普通...

    详解php中的implements 使用

    php类中接口的应用关键字是interface、implements了,接口是一种成员属性全部为抽象或常量的特殊抽象类,implements主要是对类名,类所拥有的方法,以及所传参数起约束和规范做用,有点像 abstract 抽象类。...

    超级有影响力霸气的Java面试题大全文档

     接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类...

    简易框架介绍,教学PPT

    框架是一种针对某系统(或子系统)的可重用的设计。 一个完整的应用程序可由多套框架组成...其中包括:抽象类、接口、实体类等。 从物理结构的角度看,一个框架可包含: 代码库或类库 支持程序 脚本语言 帮助开发的工具

    Socket编程

    Java语言从一开始就是为了让人们使用互联网而设计的,它为实现程序的相互通信提供了许多有用的抽象应用程序接口(API, Application Programming Interface),这类应用程序接口被称为套接字(sockets)。

    虚拟机 : 系统与进程的通用平台英文版带详细书签

    《虚拟机:系统与进程的通用平台》的作者从计算机体系结构研究者的角度,以计算机系统接口抽象层次中两个最重要的接口——应用的二进制接口(Application Binary Interface,ABI)和应用程序接口(Application ...

    详细解读PHP中接口的应用

    如果一个抽象类里面的所有方法都是抽象方法,且没有声明变量,而且接口里面所有的成员都是public权限的,那么这种特殊的抽象类就叫接口 接口使用interface关键字定义,并使用implements来实现接口的方法,且必须完全...

    java 面试题 总结

    接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类...

    java面试题及答案.doc

    抽象类是否可实现(implements)接口? 抽象类是否可继承实体类 22. Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 23. 它们有何区别? 24. 构造器Constructor是否可被override? ...

    虚拟机 系统与进程的通用平台 James E. Smith / Ravi Nair 完整pdf

    《虚拟机:系统与进程的通用平台》的作者从计算机体系结构研究者的角度,以计算机系统接口抽象层次中两个最重要的接口——应用的二进制接口(Application Binary Interface,ABI)和应用程序接口(Application ...

    iPhone应用开发从入门到精通代码

    21.1 iPhone OS预览21.1.1 iPhone OS的发展历史21.1.2 iPhone OS的外观31.1.3 ...类应用程序111.3.2 实用工具类应用程序121.3.3 电子书类应用程序131.4 iPhone OS应用程序商店141.5 本章小结151.6 本章练习15基...

    JAVA面向对象详细资料

    28.5 抽象方法与抽象类的使用 42 28.6 abstract的使用场合 42 29 练习:写一个“愤怒的小鸟”: 43 30 final关键字 43 30.1 final可以修饰到3个地方 43 30.2 引用类型加final修饰表示引用不可变 44 31 static关键字 ...

Global site tag (gtag.js) - Google Analytics