`
TonyLian
  • 浏览: 396626 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【第34条】通过接口引用对象

阅读更多

【第25条】中已经讲过“应该使用接口,而不是类作为参数的类型”。更进一步地讲,应该优先使用接口而不是类来引用对象。也就是说,当我们在考虑引入一个引用变量的时候,应该首先考虑的是,我们需要一个具有什么样功能的变量,也就是选择一个什么接口。之后才是在众多的实现类中选择一个合适的实现进行初始化。 

// Interface object = new Class(); 

Map myTable = new Hashtable(); 

 

    如果你养成了使用接口作为类型的习惯,那么你的程序将会更加灵活。


    如果没有合适的接口存在的话,那么,用类而不是接口来引用一个对象,是完全合适的。在写本条笔记之前,我也曾在论坛上发过两个帖子讨论类似的问题。一个案例是,我的一个应用中,需要一个 key—value 对的数据类型,并需要能够得到当前所有的 keys 和所有的 values,甚至为了“保护性拷贝”(参考【第24条】)时还需要 clone 之。


    然而 Map 接口,可能并不能完全满足我的需求, values() 方法来自Map接口,而 keys() 方法来自Dictionary抽象类,clone() 方法则当然来自Cloneable接口。所以,没有一个合适的接口的时候,我只有使用 Hashtable 类了。

public class Hashtable extends Dictionary implements Map, Cloneable, ... 

 

具体讨论贴:http://www.iteye.com/topic/392921

另外一个帖子,是关于接口与抽象骨架实现类及其子类的关系的:http://www.iteye.com/topic/385733





【Effective Java 学习笔记】系列连载专题请见:
http://tonylian.iteye.com/categories/64208

 

0
0
分享到:
评论

相关推荐

    C++编程规范101条规则、准则与最佳实践PDF.rar

    第34条 用组合代替继承 58 第35条 避免从并非要设计成基类的类中继承 60 第36条 优先提供抽象接口 62 第37条 公用继承即可替换性。继承,不是为了重用,而是为了被重用 64 第38条 实施安全的覆盖 66 ...

    JAVA面向对象详细资料

    34 接口的应用(面向对象分析) 49 34.1 案例(第一版,使用接口) 50 34.2 案例(第二版) 52 35面向对象设计原则 54 1、找出应用中可能需求变化的代码,把它们独立出来,不要和那些需求不变化的的代码混在一起 54 ...

    精通Hibernate:对象持久化技术第二版part3

    第8章 通过Hibernate操纵对象(上) 179 本章站在持久化层的角度,Java对象在生命周期中可处于临时状态、持久化状态、删除状态和游离状态。处于持久化状态的Java对象位于一个Session实例的缓存中,Session能根据这...

    精通hibernate:对象持久化技术孙卫琴第二版part2

    第8章 通过Hibernate操纵对象(上) 179 本章站在持久化层的角度,Java对象在生命周期中可处于临时状态、持久化状态、删除状态和游离状态。处于持久化状态的Java对象位于一个Session实例的缓存中,Session能根据这...

    (Perl 语言编程-第三版 作者:Larry Wall, Tom Christiansen, and Jon Orwant 译者:何伟平)Perl .chm

    第三章 单目和双目操作符 第四章 语句和声明 第五章 模式匹配 第六章 子过程 第七章 格式 第八章 引用 第九章 数据结构 第十章 包 第十一章 模块 第十二章 对象(上) 第十二章 对象(下) 第十三章 重载 第...

    PHP 面向对象技术(全面讲解).txt

    个指针指向堆里面的对象,所以我们可以通过$p1 这个引用变量来操作对象,通常我们也称对象引用 为对象。 6.如何去使用对象中的成员 上面看到PHP 对象中的成员有两种一种是成员属性,一种是成员方法。对象我们以经可以...

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

    面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 4. 多态性:  多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化...

    spring.net中文手册在线版

    Spring.NET是一个应用程序框架...第三十二章. Java开发人员必读 32.1.简介 32.2.Beans和Objects 32.3.PropertyEditor和TypeConverter 32.4.ResourceBundle和ResourceManager 32.5.异常 32.6.应用程序配置 32.7.AOP框架

    JAVA面试题最全集

    一、Java基础知识 1.Java有那些基本数据类型,String是不是基本...这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() ...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    对象的使用包括引用对象的成员变量和方法,通过运算符·可以实现对变量的访问和方法的调 用,变量和方法可以通过设定一定的访问权限(见下面的例子)来允许或禁止其它对象对它的 访问。 我们先定义一个类 Point。 例子...

    变态级JAVA程序员面试32问

     第三十,当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?  第三十一,swtich是否能作用在byte上,是否能作用在long上,是否能...

    javaSE代码实例

    9.3.3 接口引用的使用 162 9.3.4 接口中方法无法使用的修饰符 165 9.4 接口与抽象类 166 9.4.1 语法上的不同 167 9.4.2 具体含义的不同 167 9.5 基于接口的多态 169 9.6 接口与回调 170 9.7 ...

    疯狂JAVA讲义

    第1章 Java概述 1 1.1 Java语言的发展简史 2 1.2 Java的竞争对手及各自优势 4 1.2.1 C#简介和优势 4 1.2.2 Ruby简介和优势 4 1.2.3 Python的简介和优势 5 1.3 Java程序运行机制 5 1.3.1 高级语言的运行机制 6...

    C# 基础教程

    第三章 面向对象编程的基础知识 21 3.1一切都是“对象” 22 3.1.1 对象和类 24 3.1.2 实例化 25 3.2 面向对象编程语言的三大原则 26 3.2.1 封装 26 3.2.2 继承 28 3.2.3 多态性 30 3.4 本章小结 33 3.5 实战演练 33 ...

    Java语言基础下载

    第三十四章:Hibernate基础 677 学习目标 677 Hibernate简介 678 建立简单的Hibernate应用 678 通过 Hibernate API 操纵数据库 684 Hibernate的初始化 687 访问Hibernate的Session接口 688 Hibernate工作原理图 691 ...

    java 面试题 总结

    面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 4. 多态性: 多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多...

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

    答:两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。 38.abstract class和interface有什么区别? 答: 声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为...

    《javaScrip开发技术大全》源代码

    第2章(\代码\第02章) • sample01.htm 将JavaScript代码插入在标签与标签之间 • sample02.htm 将JavaScript代码放在了标签与标签之间 • sample03.htm JavaScript与HTML混合执行 • ...

    Delphi6分布式开发

    第三篇讲了另一种分布式技术CORBA的原理及实现;第四篇讲多层分布式数据库系 统,从数据库的链接讲起,由浅入深地讲了MIDAS的概念,它的DCOM及CORBA的实现方式,最后深入剖析了它的结构;第五 篇讲了分布式Web技术,...

Global site tag (gtag.js) - Google Analytics