面试的一个问题:抽象类和接口的区别:
我当时的回答:1.从表象上来看,都是契约编程。子类可以实现多个抽象类,但可以去实现多个借口。2.抽象类是"IS A"的概念,比如老虎属于猫科动物,而接口是功能类,它提供了具有相同功能子类的统一契约。
面试官随即问了一句:你说的类和借口的区别,我想知道的是抽象类和接口的区别,或者说设计时我什么情况下选择抽象类?什么情况下选择接口?
细细一想也是,自己的答案只不过是书本上一些浅显的东西,真正的差别并没有联系到实际,仔细学习后,谈谈自己现在的想法,希望以后有深入了解:
要说不同点,首先要说相同点:
1.都可以被继承
2.都不能被实例化
3.都可以包含方法声明
4.派生类必须实现未实现的方法
区别:
1.抽象类是一个不完整的类,需要进一步细化,而接口是一个行为的规范或规定,微软的自定义接口后面带有able字段,证明其是表述”我能做。。。“
2.抽象类可以定义字段,属性和方法实现。接口只能定义属性索引器,事件和方法。
3.抽象类更多的是定义在一系列紧密相关的类之间,而借口大多数是定义在关系疏松但都实现某一功能的类中。
4.接口不具备任何继承的特点,它仅仅承诺了可以能够调用的方法。
5.接口可以被多重继承,而抽象类只能被单一继承。
6.接口可以支持回调,而继承并不具备这个特性。
7.抽象类不能被密封。
8.抽象类实现的方法默认为虚的,但实心接口的类中的接口方法却默认为非虚的,当然也可以声明为虚的。
在使用的过程中,
1.抽象类主要用于关系密切的对象,而接口用于为不想关的类提供通用功能。
2.如果要设计大的功能单元,则使用抽象类。
3.如果要在组件的所有实现间提供通用的已实现的功能,则使用抽象类。
4.如果创建的功能在大范围的全异对象间使用,则使用接口。
5.如果要设计小而简练的功能模块,则使用接口。
6.如果预计要创建组件的多个版本,则创建抽象类。抽象类提供简单的方法来控制组件版本。
7.好的接口应该是具有专一功能性的,而不是多功能性的否则会造成接口污染。如果一个类只是实现了这个接口中的一个功能,而不得不去实现接口中的其他方法,那么就叫接口污染。
8.尽量避免使用继承来实现组建功能,而是使用黑箱复用,及对象组合。因为继承的层次越多,造成最后的结果就是当你调用这个类群中的某一类时,就必须吧它们全部加载到栈中,后果可想而知。同时,微软在构建一个类时,很多时候就用到了对象组合的方法,比如ASP.net的page类,有server,request等属性,但是其实它们都是某个类的对象。使用page这个类的对象来调用其他方法和属性是非常基本的一个设计原则。
总之,我觉得宗旨就是两方面,一方面就是抽象类和对象都是契约编程,这也应该是抽象类较其他普通类的区别。另一个方面,抽象类包含一种继承的概念,也就允许抽象类里有已经实现的公用的方法,它一般预定义子类必须实现的方法。而接口仅仅是一些行为的规范和约定,一般用来提供外部调用,说明能做什么。
相关推荐
### Java中的抽象类和接口的理解 #### 一、引言 在面向对象编程语言Java中,抽象类(Abstract Class)和接口(Interface)是实现多态性和代码复用的重要手段。它们都允许开发者定义行为规范而不需要具体实现细节,...
通过这些理解,我们可以更好地利用抽象类和接口来设计灵活且可扩展的软件架构。在选择使用抽象类还是接口时,应根据项目需求和设计原则来权衡。例如,如果需要共享部分实现并有继承关系,可以选择抽象类;如果需要多...
### 详细解析Java中抽象类和接口的区别 #### 引言 在面向对象编程中,Java作为一种广泛应用的编程语言,提供了多种方式来实现抽象的概念。其中最常用的两种机制是抽象类(abstract class)和接口(interface)。这...
在Java语言中,abstract class和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,...
在Java编程语言中,抽象类和接口是两种重要的面向对象设计...通过这样的练习,你可以更好地理解和掌握Java中的抽象类与接口,以及它们在实际开发中的应用。在实践中不断尝试和调试,将有助于深化对这两个概念的理解。
在编程领域,抽象类和接口是面向对象设计中的两个重要概念,它们用于实现代码的抽象和多态性。本实验旨在帮助你深入理解和熟练运用这两种机制。 首先,让我们来看看抽象类。抽象类是一种不能被实例化的类,它通常...
在C#编程语言中,抽象类和接口是实现面向对象编程(OOP)中的多态性和代码重用的关键概念。本文将深入探讨这两个概念,并解释它们在C#中的使用方式和区别。 ### 抽象类 抽象类是一种特殊的类,它不能被实例化,其...
在C#编程语言中,抽象类和接口都是用于实现面向对象编程中多态特性的关键概念。它们都旨在为其他类提供一种定义行为和特性的模板或规范,但它们之间存在着重要的区别。本文将详细探讨C#中的抽象类与接口之间的差异,...
理解面向对象、抽象类和接口的概念,并熟练运用它们,对于编写可维护、可扩展的代码至关重要。在实际项目开发中,合理地使用这些概念可以帮助我们更好地组织代码结构,提高代码的复用性和灵活性。
在Java编程语言中,抽象类和接口是两种重要的面向对象设计概念,它们允许我们定义规范,为其他类提供模板或行为指南。让我们深入探讨这两个概念及其在Java中的应用。 首先,我们来理解抽象类。在Java中,抽象类是一...
在编程世界中,抽象类和接口是两种非常重要的概念,它们在实现代码的组织和设计模式上发挥着关键作用。本文将深入探讨抽象类与接口的异同,并结合实际应用场景来帮助理解这两种机制。 首先,让我们从定义开始。抽象...
5. **接口与抽象类的区别**:对比两者在使用上的差异,包括继承的数量限制(一个类只能继承一个抽象类,但可以实现多个接口)和成员类型(抽象类可有实例变量,接口则没有)。 6. **适配器模式**:可能会介绍如何...
### 抽象类与接口的区别 在面向对象编程中,抽象类和接口是两种非常重要的概念,它们在软件设计和实现过程中发挥着不可替代的作用。本文将深入探讨这两种概念的区别,帮助开发者更好地理解和运用它们。 #### 一、...
抽象类和接口 摘要:本文档介绍了抽象类和接口的概念、特点和使用方法,包括抽象类的定义、抽象方法、接口的声明和实现、抽象类和...本文档提供了抽象类和接口的详细介绍和应用场景,帮助开发者更好地理解和应用它们。
### 抽象类和接口的详细区别和联系 在面向对象编程中,抽象类与接口是两种非常重要的概念,它们都是实现多态性的方式之一,但在使用场景、语法特性和设计哲学等方面存在明显的不同。本篇文章将深入探讨这两者的区别...
本文将深入探讨Java抽象类与接口的区别,帮助初学者更深刻地理解这两个概念。 #### 二、理解抽象类与接口的基本概念 ##### 抽象类 - **定义**:抽象类是一种特殊的类,它不能被实例化。抽象类通常包含一个或多个...
理解抽象类与接口的区别并恰当运用,有助于提升代码的可扩展性和可维护性,使得软件设计更加灵活和面向对象。在进行Java编程时,应根据项目需求和设计原则,合理选择抽象类或接口来实现特定功能,以达到最佳的设计...
【C#抽象类与接口方法】在C#编程语言中,抽象类和接口是两种用于实现多态性和封装的关键概念,它们允许我们设计灵活、可扩展的代码结构。 抽象类是一种特殊的类,它不能被实例化,而是作为其他类的基类使用。抽象类...
总结来说,理解和掌握Java中的接口和抽象类是成为一名优秀Java开发者的关键。选择使用哪种方式取决于具体的需求和设计目标,灵活运用它们可以帮助我们编写出更高效、更易于维护的代码。通过阅读"java中接口与抽象类...