"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.
分享到:
相关推荐
- **抽象类与接口**:抽象类可以包含抽象方法(没有实现的方法),用于定义模板类;接口则完全由抽象方法组成,用于定义行为标准。 ### 2. 访问修饰符 - `public`:公开,任何地方都可以访问。 - `protected`:受...
以上知识点涵盖了Java基础以及JavaEE面试中常见的问题,包括数据类型的比较、类与接口的设计、异常处理机制以及内存管理的细节,这些都是Java程序员应掌握的基本概念和技能。在面试中理解和熟练运用这些知识,能够...
2. **抽象类与接口的区别**: - 接口支持多重继承,而抽象类只支持单一继承。 - 抽象类可以包含构造器和部分方法的实现,而接口不能包含任何实现,所有方法默认都是`abstract`的。 - 抽象类中的成员变量默认访问...
1. **语法基础**:变量、数据类型、运算符、流程控制(if-else,switch,for,while,do-while)、数组、类与对象、封装、继承、多态、抽象类和接口。 2. **异常处理**:try-catch-finally结构,自定义异常,throw...
### Java面试宝典2018知识点概览 #### 1. Java基础 - **1.1 Collection和Map** - **知识点概述**: - 掌握`Collection`接口和`Map`接口的基本概念。 - 理解`List`、`Set`和`Map`之间的区别。 - `ArrayList`与`...
这份资料涵盖了Java基础、面向对象、多态、类加载机制、接口与抽象类等多个关键知识点。 首先,关于面向对象与面向过程的理解,面向对象是软件开发的一种核心思想,它强调将数据和操作数据的方法封装在一起,形成...
2. 接口与抽象类的区别: - 接口只包含方法签名,没有方法体,完全抽象,用于定义行为规范。而抽象类可以包含抽象方法(没有方法体)和具体方法(有方法体),它提供了一种部分实现的机制。 3. forward与redirect...
- 抽象类可以包含抽象方法和非抽象方法(即具体实现的方法),而接口中的所有方法默认都是抽象的(自Java 8起,接口可以包含默认方法和静态方法)。 - 抽象类中的方法可以有任意的访问级别(如`public`、`...
答:抽象类与接口都用于抽象,但是抽象类可以有自己的部分实现,而接口则完全是一个标识(同时有多重继承的功能)。 8. Java 的通信编程 答:Java 的通信编程可以使用 Socket 编程来实现。Socket 是一种网络通信的...
### JavaEE技术面试常见问题详解 #### 数据结构 1. **链表的Java实现** 链表是一种常见的线性数据结构,每个元素由数据和指向下一个元素的指针组成。 ```java public class SortableLinkedList<E extends ...
这只是JavaEE面试题的一部分,涉及的内容广泛,涵盖了动态网页技术、框架、设计模式等多个方面,这些都是JavaEE开发者应具备的基本技能。深入理解这些概念和原理对于通过JavaEE认证和实际项目开发至关重要。
总结而言,这部分面试题内容广泛,涉及了Java语言的基础、数据结构、编程思想、基本数据类型、类与对象以及数据类型转换等核心知识点。掌握这些知识点对于准备Java面试的应聘者来说是必要的,它们可以帮助应聘者在...
#### 1.5 JavaSE.JavaEE和JavaME有什么区别? - **Java SE (Standard Edition)**:标准版,提供核心 Java 技术,包括基本的类库和开发工具,适用于桌面应用程序开发。 - **Java EE (Enterprise Edition)**:企业版...
Java面试神技涉及到多个Java基础知识和技术细节,下面详细解释每个知识点: 1. B/S架构与C/S架构: - B/S(Browser/Server)架构:即浏览器/服务器架构,用户通过浏览器(如Chrome、Firefox等)访问服务器上提供的...
在Java中,抽象可以通过创建抽象类和接口来实现,它们定义了共同的行为和属性,但不提供具体的实现。 - **继承**:继承允许创建一个新类(子类)继承现有类(父类)的特性,从而促进代码复用和类的层次结构。子类...
JavaEE技术面试常见问题主要涵盖了数据结构、算法、设计模式以及Java基础等多个方面,这些都是面试中经常被问到的关键知识点。下面将详细阐述这些领域的相关内容。 1. 数据结构: - 链表:链表是一种线性数据结构...
6. 接口和抽象类的区别:接口可以继承接口,抽象类可以实现接口,抽象类可以继承具体类。抽象类中可以有静态的main方法。 通过本文,我们可以了解到Java面试经验中的一些重要知识点,包括Java基础知识、Java Web、...
JavaEE面试题涵盖了许多核心的Java编程概念,这里我们将深入探讨其中几个关键知识点。 1. **final, finally, finalize的区别**: - `final`:这个关键字用于声明不可改变的变量、类或方法。对于变量,一旦赋值后就...