`
阅读更多
    虽然一直觉得 interface 和abstract其实各自作用不同,而且有各自所适应的情况。但是就是说不清楚,他们在使用时应该在注意的区别。
    看了 Erich Gamma的说法,恍然大悟。java interface作为接口时是应该相对稳定的。一旦你修改了一个接口,其实现都会作废,需要按照从新修改来遵守这个已发布的契约。而从,领域抽象的角度来看。java 中的interface 应该作为一个行为契约来用。所以,只有相对稳定的行为集可以作为一个接口公告和契约发布出来,让client调用,这才是java interface的真实含义。比如,发布一个Transcation interface作为,事务行为契约再好不过了。
    而abstract作为接口时是相对稳定性是宽松的。如果你想增加一个方法,来让一个比较特殊的实例来作为实现。你可以直接在抽象方法实现一个默认方法,这样其他子类就不会受到较大的牵连。从领域抽象的角度来说,对象既可以描述实体也可以描述行为。然而,通常一旦描述行为,使用整个对象来描述一个整体行为的(注意不是一个行为集)。所以,总体来说,abstract应该用以描述内部行为相对不太确定的实体,或内部子行为不太确定的行为的。比如,java collection框架中的AbstractList
    Erich Gamma: 接口提取出对象之间的协作关系。接口是独立于实现细节的,而且它定义了协作的语汇(vocabulary)。一旦我理解了接口,我就理解了系统的大部分。为什么?因为当我理解了所有接口以后,我应该就能够理解关于这个问题的语汇。
    精辟啊。。。系统分治以后,整个系统的复杂度就转化为子系统之间的交互上了。一旦定义了套接口,那么对于各个子系统来说已经制导整个系统了,复杂的问题就变得简单了。
分享到:
评论

相关推荐

    1.4 interface.presented.pdf

    而抽象类型(Abstract Types)如`io.Reader`、`io.Writer`和`fmt.Stringer`则只描述行为,它们定义了一组方法,但不指定接收者类型。 在Go中,一个接口可以被看作是实现了特定方法集的具体类型的集合。例如,`io....

    public interface Fei{.docx

    `public`使得它对所有包可见,`static`意味着它与接口本身关联,而非接口的实例,`final`则表明这个变量一旦被赋值,就不能再改变。 在`Bird`类中,`implements Fei`表示`Bird`类实现了`Fei`接口,因此`Bird`类必须...

    interface&abstract class

    ### Interface与Abstract Class的区别及应用场景 #### 一、Interface与Abstract Class的概念理解 在面向对象编程语言中,如Java,接口(Interface)和抽象类(Abstract Class)是两种非常重要的概念,它们都被用来...

    java中abstractclass和Interface.doc

    ### Java中的Abstract Class与Interface详解 #### 一、面向对象设计的重要性及抽象的概念 面向对象设计的核心在于抽象,这是衡量软件设计质量的关键因素之一。良好的软件设计不仅体现在高效的底层实现上,更重要的...

    java_interface_instance.rar_interface

    在Java编程语言中,接口(Interface)是一种非常重要的概念,它体现了面向对象设计的原则,提供了多继承机制。本文将深入探讨Java接口实例及其在实际应用中的作用。 首先,我们需要理解接口的基本定义。Java接口是...

    深入理解abstract class和interface

    abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性...

    Struct 、Class、Interface、Abstract区别与关系

    Struct 、Class、Interface、Abstract各个的特性、应用场景等对比

    abstract class和interface有什么区别?

    ### abstract class和interface有什么区别? 在面向对象编程中,`abstract class` 和 `interface` 都是用来实现抽象化的工具,但它们之间存在着重要的差异。理解这些差异有助于开发者更有效地设计和实现软件系统。 ...

    override abstract virtual interface比较

    C# 中 override、abstract、virtual、interface 的比较 在 C# 编程语言中,override、abstract、virtual、interface 是四个关键字,它们之间存在着紧密的联系,我们经常会遇到 override、abstract、virtual 这三个...

    java abstract class interface之间的区别介绍

    在Java编程语言中,抽象类(abstract class)和接口(interface)都是用于实现抽象化的重要工具,它们可以帮助程序员更好地组织代码,提高代码的可复用性和扩展性。尽管二者在功能上有一些相似之处,但在实际使用中...

    servlet2.4doc

    attributeAdded(ServletContextAttributeEvent) - Method in interface javax.servlet.ServletContextAttributeListener Notification that a new attribute was added to the servlet context. attributeAdded...

    static、final、abstract和interface使用总结

    在Java编程语言中,`static`、`final`、`abstract`和`interface`是四个非常重要的关键字,它们分别代表不同的特性,用于定义类、变量和方法的行为。下面是对这些关键字的详细解释: 1. **static(静态)** - **...

    PyPI 官网下载 | abstract-2021.11.29.1-py3-none-any.whl

    《PyPI官网下载:了解Python库的发布与安装——以`abstract-2021.11.29.1-py3-none-any.whl`为例》 在Python的开发环境中,PyPI(Python Package Index)是全球最大的Python软件包仓库,它为开发者提供了上传、分享...

    [转]深入理解abstract class和interface

    在编程领域,`abstract class`(抽象类)和`interface`是两种重要的设计模式,它们在构建可扩展和模块化的软件系统中起着至关重要的作用。这篇文章将深入探讨这两个概念,以及它们在实际开发中的应用。 首先,让...

    Java中的interface接口

    接口内的方法默认为public abstract类型,无需显式声明。 3. **实现接口**: 类可以通过`implements`关键字来实现一个或多个接口,例如`class ClassName implements InterfaceName { ... }`。每个接口中的抽象方法...

    c#中的interface abstract与virtual介绍

    C#中的`interface`、`abstract`和`virtual`是面向对象编程中的关键概念,它们在定义类的行为和结构方面起着重要作用。 首先,`interface`是C#中的一种规范,它定义了一组方法签名,但不提供具体实现。这意味着任何...

    陈广C#程序设计入门与实例视频教程28-34.rar

    28-virtual.swf 29-abstract.swf 30-interface(1).swf 31-interface(2).swf 32-interface(3).swf 33-IComparable.swf 34-IComparer.swf

Global site tag (gtag.js) - Google Analytics