一个类可以(继承)实现多个接口,但只能继承一个类。接口中只能定义方法名,方法参数和返回值,以及静态变量。而抽象类中可以有方法的实现,也可以定义非静态的类变量。
所以,当你需要多继承特性时,那你只能使用接口;当你需要在父类中实现部分代码(通用功能)而根据不同情况某一方法有不同的实现时,那就设计为抽象类。
我们也可以从多态性的角度来考虑是要使用接口还是用抽象类。如果预计要创建组件的多个版本,我们应该创建抽象类。这是因为,抽象类提供简单易行的方法来控制组件版本。通过更新基类,所有继承类都随更改自动更新。另一方面,接口一旦创建就不能更改。如果需要接口的新版本,必须创建一个全新的接口。所以,如果创建的功能将在大范围的全异对象间使用,则使用接口。
抽象类主要用于关系密切的对象,而接口最适合为不相关的类提供通用功能。
一个基本原则是,首先考虑使用接口。接口可以继承接口。抽象类可以实现(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数据库的访问。
分享到:
相关推荐
其中最常用的两种机制是抽象类(abstract class)和接口(interface)。这两种机制虽然在某些场景下可以互相替代,但它们在设计原则、实现细节以及应用场景上存在明显的区别。了解这些差异有助于开发者在面对具体...
在实际应用中,抽象类和接口都是用来描述对象的行为和状态的。但是,抽象类更多地强调继承关系,而接口更多地强调多态性。抽象类可以拥有抽象方法,也可以拥有普通的属性和方法。接口中的方法都是抽象方法,必须由...
Java 接口和抽象类 Java 编程语言提供了两种机制来实现面向对象编程的多态性:接口和抽象类。这两种机制使得 Java 应用开发具有灵活性和敏捷性。 抽象类 抽象类是一种特殊的类,它不能被实例化,不能被直接使用,...
在Java编程语言中,抽象类和接口是两种重要的面向对象设计...通过这样的练习,你可以更好地理解和掌握Java中的抽象类与接口,以及它们在实际开发中的应用。在实践中不断尝试和调试,将有助于深化对这两个概念的理解。
在编程世界中,接口(Interface)和抽象类(Abstract Class)是面向对象设计的重要概念,它们都是用于定义规范和提供多态性的方式。本实例源代码深入探讨了这两种概念及其在实际开发中的应用。 首先,我们需要理解...
### 抽象类和接口的区别分析 在面向对象编程中,抽象类与接口都是实现代码复用和提高软件模块化的重要工具。它们各自拥有独特的特性和应用场景,掌握这些概念对于编写高质量、可维护性强的代码至关重要。下面我们将...
在编程领域,抽象类和接口是面向对象设计中的两个重要概念,它们用于实现代码的抽象和多态性。本实验旨在帮助你深入理解和熟练运用这两种机制。 首先,让我们来看看抽象类。抽象类是一种不能被实例化的类,它通常...
在面向对象编程中,抽象类和接口是两种非常重要的概念,它们在软件设计和实现过程中发挥着不可替代的作用。本文将深入探讨这两种概念的区别,帮助开发者更好地理解和运用它们。 #### 一、定义 1. **抽象类**:抽象...
抽象类一般作为公共的父类为子类的扩展提供基础,这里的扩展包括了属性上和行为上的。而接口一般来说不考虑属性,只考虑方法,使得子类可以自由的填补或者扩展接口所定义的方法,就像JAVA王子所说的事件中的适配器...
在Java编程语言中,抽象类和接口是两种重要的面向对象设计概念,它们都用于实现多态性,但各自具有不同的特点和应用场景。了解并熟练掌握它们的区别对于编写高质量的Java代码至关重要。 首先,抽象类是一种不能被...
在实际应用中,如果我们需要对多种形状(如Circle和Rectangle)进行操作,抽象类和接口可以帮助我们设计更灵活的代码。比如,我们可以定义一个`Shape`抽象类或`Drawable`接口,让Circle和Rectangle类继承或实现这些...
在C#编程语言中,抽象类和接口都是用于实现面向对象编程中多态特性的关键概念。它们都旨在为其他类提供一种定义行为和特性的模板或规范,但它们之间存在着重要的区别。本文将详细探讨C#中的抽象类与接口之间的差异,...
在Java编程语言中,抽象类和接口是两种重要的面向对象设计概念,它们允许我们定义规范,为其他类提供模板或行为指南。让我们深入探讨这两个概念及其在Java中的应用。 首先,我们来理解抽象类。在Java中,抽象类是一...
在面向对象编程语言Java中,抽象类(Abstract Class)和接口(Interface)是实现多态性和代码复用的重要手段。它们都允许开发者定义行为规范而不需要具体实现细节,但它们之间存在一些重要的区别。本文将详细介绍...
在编程世界中,抽象类和接口是面向对象设计的重要概念,它们都用于实现代码的抽象和多态性,但有着不同的使用场景和规则。这里我们将深入探讨这两种机制,并结合给出的"codePiece"代码片段来分析它们在实际应用中的...
- **例子**:假设我们正在设计一个图形处理应用,其中有一个`Shape`抽象类,包含抽象方法`draw()`和`area()`。`Circle`、`Rectangle`等具体图形类可以继承`Shape`抽象类,并实现这些方法。 ```java abstract class ...
在Java编程语言中,抽象类和接口是两种重要的机制,用于实现代码的抽象和多态性。本章主要探讨了这两个概念以及它们在实际编程中的应用。 首先,抽象类(abstract class)是一种不能被实例化的类,它通常含有至少一...
在编程领域,接口和抽象类是面向对象设计中的重要概念,它们在软件工程中起着至关重要的作用。本文将深入探讨“接口抽象类”的主题,包括它们的概念、用途、区别以及在Java编程语言中的实现。 首先,让我们了解什么...
在.NET框架中,抽象类和接口都是用于实现多态性和代码重用的关键概念,它们各自具有独特的特性和用途。下面将详细阐述这两种概念的异同点。 首先,无论是抽象类还是接口,它们都无法直接被实例化,都需要通过继承来...