`

<Java.JavaEE面试整理>(9)--抽象类与接口有什么区别?以及如何选择?

阅读更多
"abstract class" or "interface"?

Q 12: 抽象类与接口有什么区别?以及如何选择? LF DP DC FAQ
A 12: In design, 我们想让基类只为其子类提供一个调用的接口,这样做我们并不想将此类实例化,我们只是在运行时将子类upcast to it(这样就可以获得多态特性了).我们可以用Java里的abstract关键字来将些基类定义为abstract class.
    Java里的Interface又将这个概念进一步地抽象了,利用它编译器将阻止对接口中展现的方法实现.这样我们就只能声明一个method而不能有任何的实现,而其实现类将提供相应方法的真正实现.这个Interface在OO设计中非常有用,利用它我们可以将接口与其具体的实现分开,并使以下几种优势成为可能:
    1,在无需硬性将一些毫不相干的类放入一个继承系统中的情况下,我们可以用此Interface将其包装.(Capture similarities among unrelated classes without artificially forcing a class relationship.)
    2,声明methods以让一个或多个类来实现.(Declare methods that one or more classes are expected to implement.)  
    3,只提供一个对象的接口,而将具体实现隐藏(Reveal an object's programming interface without revealing its actual implementation.)  
    4,可以在Java里实现多重接口的继承,利用这个多重接口继承我们像在其它OO语言里一样实现类的多重继承.(Model multiple interface inheritance in Java, which provides some of the benefits of full on multiple inheritances, a feature that some object-oriented languages support that allow a class to have more than one superclass.)
 
Q.那我们在什么情况下使用abstract class呢? When to use an abstract class?:
    当我们想获得继承里的实现继承时,这个abstact class是一个很好的选择.也就是说在Application framework里,我们可以在抽象类里定义那些default behavior,而将那些specific behavior交给子类去实现.Care should be taken not to overuse implementation inheritance as discussed in Q10 in Java section.
 
Q. Interface又适合什么样的设计情况呢?
    当想获得基于多态性的接口继承时,用interface,这样clients就只接触这个接口type而并不真正接触其具体实现.另一方面,若项目中的设计会经常改动时,就一定要使用Interface而别再使用抽象类.基于接口的编程可以大降低代码的耦合,其在代码重用方面的不足我们也可以通过对象的组合来获得.For example: The Spring framework’s dependency injection promotes code to an interface principle. Another justification for using interfaces  is that they solve the ‘diamond problem’ of traditional multiple inheritance.
 
Design pattern: Strategy design pattern lets you swap new algorithms and processes into your program without altering the objects that use them.
分享到:
评论

相关推荐

    JavaEE面试题加答案

    - **抽象类与接口**:抽象类可以包含抽象方法(没有实现的方法),用于定义模板类;接口则完全由抽象方法组成,用于定义行为标准。 ### 2. 访问修饰符 - `public`:公开,任何地方都可以访问。 - `protected`:受...

    JAVAEE精选面试题.docx

    以上知识点涵盖了Java基础以及JavaEE面试中常见的问题,包括数据类型的比较、类与接口的设计、异常处理机制以及内存管理的细节,这些都是Java程序员应掌握的基本概念和技能。在面试中理解和熟练运用这些知识,能够...

    javaee 经典面试题集锦

    2. **抽象类与接口的区别**: - 接口支持多重继承,而抽象类只支持单一继承。 - 抽象类可以包含构造器和部分方法的实现,而接口不能包含任何实现,所有方法默认都是`abstract`的。 - 抽象类中的成员变量默认访问...

    java和javaEE面试题大全打包

    1. **语法基础**:变量、数据类型、运算符、流程控制(if-else,switch,for,while,do-while)、数组、类与对象、封装、继承、多态、抽象类和接口。 2. **异常处理**:try-catch-finally结构,自定义异常,throw...

    Java面试宝典2018

    ### Java面试宝典2018知识点概览 #### 1. Java基础 - **1.1 Collection和Map** - **知识点概述**: - 掌握`Collection`接口和`Map`接口的基本概念。 - 理解`List`、`Set`和`Map`之间的区别。 - `ArrayList`与`...

    2020年JavaEE面试宝典.pdf

    这份资料涵盖了Java基础、面向对象、多态、类加载机制、接口与抽象类等多个关键知识点。 首先,关于面向对象与面向过程的理解,面向对象是软件开发的一种核心思想,它强调将数据和操作数据的方法封装在一起,形成...

    javaEE面试题.docx

    2. 接口与抽象类的区别: - 接口只包含方法签名,没有方法体,完全抽象,用于定义行为规范。而抽象类可以包含抽象方法(没有方法体)和具体方法(有方法体),它提供了一种部分实现的机制。 3. forward与redirect...

    JAVAEE常见面试汇总.docx

    - 抽象类可以包含抽象方法和非抽象方法(即具体实现的方法),而接口中的所有方法默认都是抽象的(自Java 8起,接口可以包含默认方法和静态方法)。 - 抽象类中的方法可以有任意的访问级别(如`public`、`...

    资深工程师整理面试题:Java

    答:抽象类与接口都用于抽象,但是抽象类可以有自己的部分实现,而接口则完全是一个标识(同时有多重继承的功能)。 8. Java 的通信编程 答:Java 的通信编程可以使用 Socket 编程来实现。Socket 是一种网络通信的...

    JavaEE技术面试常见问题.doc

    ### JavaEE技术面试常见问题详解 #### 数据结构 1. **链表的Java实现** 链表是一种常见的线性数据结构,每个元素由数据和指向下一个元素的指针组成。 ```java public class SortableLinkedList&lt;E extends ...

    JavaEE认证-面试题.doc

    这只是JavaEE面试题的一部分,涉及的内容广泛,涵盖了动态网页技术、框架、设计模式等多个方面,这些都是JavaEE开发者应具备的基本技能。深入理解这些概念和原理对于通过JavaEE认证和实际项目开发至关重要。

    Java面试题2020-7-13.pdf

    总结而言,这部分面试题内容广泛,涉及了Java语言的基础、数据结构、编程思想、基本数据类型、类与对象以及数据类型转换等核心知识点。掌握这些知识点对于准备Java面试的应聘者来说是必要的,它们可以帮助应聘者在...

    java资料面试题

    #### 1.5 JavaSE.JavaEE和JavaME有什么区别? - **Java SE (Standard Edition)**:标准版,提供核心 Java 技术,包括基本的类库和开发工具,适用于桌面应用程序开发。 - **Java EE (Enterprise Edition)**:企业版...

    (备份)Java面试神技.pdf

    Java面试神技涉及到多个Java基础知识和技术细节,下面详细解释每个知识点: 1. B/S架构与C/S架构: - B/S(Browser/Server)架构:即浏览器/服务器架构,用户通过浏览器(如Chrome、Firefox等)访问服务器上提供的...

    JavaEE基础面试题.docx

    在Java中,抽象可以通过创建抽象类和接口来实现,它们定义了共同的行为和属性,但不提供具体的实现。 - **继承**:继承允许创建一个新类(子类)继承现有类(父类)的特性,从而促进代码复用和类的层次结构。子类...

    JavaEE技面试常见问题.doc

    JavaEE技术面试常见问题主要涵盖了数据结构、算法、设计模式以及Java基础等多个方面,这些都是面试中经常被问到的关键知识点。下面将详细阐述这些领域的相关内容。 1. 数据结构: - 链表:链表是一种线性数据结构...

    广州传智播客JavaEE工程师测试题(带答案的).docx

    在面试中可能会问到如何选择使用接口还是抽象类,以及它们各自的应用场景。 JavaScript和SQL作为前端和数据库层面的基础知识,也常常出现在JavaEE工程师的面试题中。了解JavaScript的事件循环、作用域链等概念,...

    javaee 面试题

    JavaEE面试题涵盖了许多核心的Java编程概念,这里我们将深入探讨其中几个关键知识点。 1. **final, finally, finalize的区别**: - `final`:这个关键字用于声明不可改变的变量、类或方法。对于变量,一旦赋值后就...

Global site tag (gtag.js) - Google Analytics