Abstract Classes and Interfaces抽象类与接口

合集下载

接口与抽象类的区别

接口与抽象类的区别

Interface和abstract的区别抽象类是一种特殊的基类,里面除包含一些基本的属性和方法之外,还能包含一些只声明但没有实现的方法,用abstract去声明。

abstract类不能创建实例对象,含有abstract的方法的类必须定义为abstract class ,abstract class 里的方法不必是抽象的,抽象来中定义抽象方法必须放在具体子类中实现。

接口是一种更加抽象的类型,里面声明的方法全部公开给实现者去实现,并不关心具体细节,关键字是interface。

可以说成是抽象类的特例。

接口中的所有方法都必须是抽象的,接口中的方法定义默认为public abstract 。

接口中的变量是全局常量,即public static final修饰的。

以下来讲述一下interface和abstract的区别:声明的不同◆抽象类用abstract声明,抽象方法用abstract修饰且无方法体,允许无抽象方法但必须实现,允许有构造方法,允许有成员变量。

//abstract class 声明抽象类abstract class Abstract1{ int n; //抽象类的成员变量可不赋初值//abstract void speak3(){} 非法//abstract 修饰的方法不能有方法体abstract void speak3();//无abstract 修饰的方法必须有方法体int GetX(int x){ return x;} //抽象类可以有构造方法Abstract1(){}}abstract class Abstract2{ //抽象类可以没有abstract方法int GetY(int y){ return y;}}◆接口用interface修饰,方法一定没有方法体,不可以有构造方法,不允许有成员变量(只能有常量)。

//interface 声明接口interface Interface1{ //int m; 非法——接口的成员变量必须赋初值//public static final可以省略int m=1;//Interface1(); 非法——接口不能有构造方法//void speak1(){} 非法——方法不能有方法体void speak1();void speak2();} interface Interface2{ int Sum(int x);}使用的不同◆抽象类只能单继承,接口可以多实现◆实现接口时必须写出所有方法(包括空方法),抽象类只要求写出abstract方法即可。

抽象方法和接口的区别

抽象方法和接口的区别

抽象方法和接口的区别
抽象方法和接口是面向对象编程中的两个重要概念,它们之间存在以下区别:
1. 定义方式:抽象方法是在抽象类中定义的方法,使用关键字abstract修饰,没有方法体;接口是由方法签名组成的集合,使用关键字interface进行定义。

2. 继承关系:抽象方法通过继承的方式实现子类对该方法的重写,一个类只能继承一个抽象类;接口通过实现的方式实现对接口中方法的定义,一个类可以实现多个接口。

3. 状态:抽象方法可以有非抽象方法和属性,并可以包含构造函数,一个抽象类可以有自己的状态;接口只能包含抽象方法和常量,没有自己的状态。

4. 实例化:抽象方法不能直接被实例化,需要通过子类继承和重写来实现;接口不能被实例化,但可以通过实现类实例化,使用接口引用来调用实现类的方法。

5. 使用场景:抽象方法适用于需要有默认实现和状态的情况,可以用作基类从而提供一些共享的实现;接口适用于需要强制与不同类之间进行某种逻辑上的约束的情况。

总结来说,抽象方法提供了一种非强制性的基类实现,而接口则是一种强制性的实现规范。

抽象方法更强调类的继承和共享实现,接口更强调类的多态和实现规范。

抽象类和接口的相同点跟区别

抽象类和接口的相同点跟区别

相同点:(1) 都可以被继承(2) 都不能被实例化(3) 都可以包含方法声明(4) 派生类必须实现未实现的方法区别:(1) 抽象基类可以定义字段、属性、方法实现。

接口只能定义属性、索引器、事件、和方法声明,不能包含字段。

(2) 抽象类是一个不完整的类,需要进一步细化,而接口是一个行为规范。

微软的自定义接口总是后带able字段,证明其是表述一类“我能做。

”(3) 接口可以被多重实现,抽象类只能被单一继承(4) 抽象类更多的是定义在一系列紧密相关的类间,而接口大多数是关系疏松但都实现某一功能的类中(5) 抽象类是从一系列相关对象中抽象出来的概念,因此反映的是事物的内部共性;接口是为了满足外部调用而定义的一个功能约定,因此反映的是事物的外部特性(6) 接口基本上不具备继承的任何具体特点,它仅仅承诺了能够调用的方法(7) 接口可以用于支持回调,而继承并不具备这个特点(8) 抽象类实现的具体方法默认为虚的,但实现接口的类中的接口方法却默认为非虚的,当然您也可以声明为虚的(9) 如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中方法使用规则:1、抽象类主要用于关系密切的对象,而接口最适合为不相关的类提供通用功能2、如果要设计大的功能单元,则使用抽象类;如果要设计小而简练的功能块,则使用接口。

3、如果预计要创建组件的多个版本,则创建抽象类。

接口一旦创建就不能更改。

如果需要接口的新版本,必须创建一个全新的接口。

4、如果创建的功能将在大范围的全异对象间使用,则使用接口;如果要在组件的所有实现间提供通用的已实现功能,则使用抽象类。

5、分析对象,提炼内部共性形成抽象类,用以表示对象本质,即“是什么”。

为外部提供调用或功能需要扩充时优先使用接口6、好的接口定义应该是具有专一功能性的,而不是多功能的,否则造成接口污染。

如果一个类只是实现了这个接口的中一个功能,而不得不去实现接口中的其他方法,就叫接口污染7、尽量避免使用继承来实现组建功能,而是使用黑箱复用,即对象组合。

接口和抽象类的区别和作用(功能、用途、好处)

接口和抽象类的区别和作用(功能、用途、好处)

接⼝和抽象类的区别和作⽤(功能、⽤途、好处)接⼝:抽象类和接⼝亲兄弟,但是有嫡出庶出的区别总结了4点接⼝存在的意义:1、重要性:在Java语⾔中, abstract class 和interface 是⽀持抽象类定义的两种机制。

正是由于这两种机制的存在,才赋予了Java强⼤的⾯向对象能⼒。

2、简单、规范性:如果⼀个项⽬⽐较庞⼤,那么就需要⼀个能理清所有业务的架构师来定义⼀些主要的接⼝,这些接⼝不仅告诉开发⼈员你需要实现那些业务,⽽且也将命名规范限制住了(防⽌⼀些开发⼈员随便命名导致别的程序员⽆法看明⽩ 3、维护、拓展性:⽐如你要做⼀个画板程序,其中⾥⾯有⼀个⾯板类,主要负责绘画功能,然后你就这样定义了这个类。

可是在不久将来,你突然发现这个类满⾜不了你了,然后你⼜要重新设计这个类,更糟糕是你可能要放弃这个类,那么其他地⽅可能有引⽤他,这样修改起来很⿇烦。

如果你⼀开始定义⼀个接⼝,把绘制功能放在接⼝⾥,然后定义类时实现这个接⼝,然后你只要⽤这个接⼝去引⽤实现它的类就⾏了,以后要换的话只不过是引⽤另⼀个类⽽已,这样就达到维护、拓展的⽅便性。

4、安全、严密性:接⼝是实现软件松耦合的重要⼿段,它描叙了系统对外的所有服务,⽽不涉及任何具体的实现细节。

这样就⽐较安全、严密⼀些(⼀般软件服务商考虑的⽐较多)。

那么什么是接⼝呢?接⼝是⼀种能⼒1:接⼝的命名规则与类型不同。

如果修饰符是public。

则该接⼝在整个项⽬中可见,如果省略修饰符则该接⼝只能在该包可见2:接⼝中可以定义常量,不能定义变量,接⼝中的属性都会⾃动⽤public static final修饰,即接⼝中的属性都是全局静态常量,接⼝中的常量必须在定义时指定初始值3:接⼝中所有的⽅法抽象⽅法。

接⼝中的⽅法都会⾃动⽤public abstract修饰。

即接⼝中只有全局抽象⽅法,4:和抽象类⼀样,接⼝不能被实例化,接⼝中不能有狗构造⽅法5:接⼝之间可以通过extends 实现继承关系,⼀个接⼝可以继承多个接⼝。

abstract和interface的区别

abstract和interface的区别

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

abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于abstract class和interface的选择显得比较随意。

其实,两者之间还是有很大的区别的,对于它们的选择甚至反映出对于问题领域本质的理解、对于设计意图的理解是否正确、合理。

本文将对它们之间的区别进行一番剖析,试图给开发者提供一个在二者之间进行选择的依据。

理解抽象类abstract class和interface在Java语言中都是用来进行抽象类(本文中的抽象类并非从abstract class翻译而来,它表示的是一个抽象体,而abstract class为Java语言中用于定义抽象类的一种方法,请读者注意区分)定义的,那么什么是抽象类,使用抽象类能为我们带来什么好处呢?在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样。

并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

抽象类往往用来表征我们在对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。

比如:如果我们进行一个图形编辑软件的开发,就会发现问题领域存在着圆、三角形这样一些具体概念,它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念。

正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。

在面向对象领域,抽象类主要用来进行类型隐藏。

我们可以构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。

Abstract Classes and Interfaces抽象类与接口.ppt

Abstract Classes and Interfaces抽象类与接口.ppt
Because of this, abstract classes cannot be instantiated
They act as place holders for abstraction
Abstract Class Example
In the following example, the subclasses represent objects taken from the problem domain.
private int trunkCapacity; [...]
public class Truck extends Vehicle {
private int bedCapacity; [...]
Car - trunkCapacity: int
Truck - bedCapacity: int
Often referred to as "concrete" classes
Defining Abstract Classes
Inheritance is declared using the "extends" keyword
If inheritance is not defined, the class extends a class called Object
ห้องสมุดไป่ตู้
public abstract class Vehicle {
Abstract classes are used heavily in Design Patterns
Creational Patterns: Abstract class provides interface for creating objects. The subclasses do the actual object creation Structural Patterns: How objects are structured is handled by an abstract class. What the objects do is handled by the subclasses Behavioural Patterns: Behavioural interface is declared in an abstract superclass. Implementation of the interface is provided by subclasses.

Java中抽象类(abstract class)和接口(interface)的使用

Java中抽象类(abstract class)和接口(interface)的使用

【 要 】 bt cc s 和 i e ae J a 摘 :asatl s n rc 是 a 语言 中对 于 象类定义 的两种机 制 。它们之 间在 对于抽象 类定 义的 支持 方 r a t f v 抽 面具有很 大的相似性 , 实际上 , 两者之 阃还 是有 区别的 , 于它们的选择 可 以反 映 出对 于问题领域本 质的理解 、 于设计 意 对 对 图的理解是否正确、 合 1 07 期
福 建 电 脑
jv aa中抽 象类 (bt c c s as at l s r a
吴小青
(元 锡 南 洋职 业技 术 学 院 信 息 系 江 苏 无锡
E( tr c) lnef e i a
248 10 1)
【 关键词】 : gg( satl s 接口( t a )面向对象 a t cc s) b r a 、 ie c 、 nr e f
子类只能有一个父类 , 但是 , 一个类却 可以实现多个接 口( t . ie nr fc ) ae 。接 口实际上解决 了 Jv 不支持多重继承 的问题 . aa 可以通 过实现多个接 口达到与多重继承相同的功能 第 二 。 as at l s的定 义 中 , 以有 自 己的 数 据 成 员 和 在 bt c a r cs 可 方 法。 方法 可以是抽 象的也可 以是非抽象的 . 方法也可以有默认 行为。 但是 在 itr c ne ae的定 义中 , f 变量必须是 f a s t i l ti n a c的. 方法 个 图形编辑 软件的开发 , 就会 发现 问题 领域存在着 点 、 直线 、 也不能拥有 默认行 为。在抽象类 中不能定义默认行为可 能会 造 圆、 三角形这样一些具体概念 , 它们 是互不相 同的 , 但是它们 又 成 维护上 的麻烦 。因为如果 后来想修改 类 ( 一般 通过 as at bt c r 都 属 于 图形 形 状这 样 一 个 概念 形 状 这 个 概 念 在 问题 领域 是 不 ca8 者 it ae来 表 示 ) ls 或 ne c f r 以适 应 新 的 情 况 ( 如 , 加 新 的 方 比 添 存在的 . 通俗 的说我们不能够像 想象 ” 一 样想象 ” 圆” 形状” 怎 法 或 者 给 已用 的 方 法 中 添加 新 的 参 数 ) , 会 非 常 的 麻 烦 , 是 时 就 可 样 一 个 图 形 , 就 是 一个 抽 象 概 念 。 是 因 为 抽 象 的概 念在 问题 能 要 花 费 很 多 的时 间 。但 是 如果 界 面是 通 过 as at l s 实 它 正 btc cs 来 r a 领 域 没 有 对应 的具 体 概念 .所 以 用 以表 征 抽 象 概 念 的抽 象 类 是 现 的 .那 么 可 能 就 只 需 要 修 改 定 义 在 a 8 at l s 的 默 认 行 bt c a 中 r cs 不 能够实例化具体对象的。 为就 可 以 了 。 个 抽 象 类 可 以定 义 一 个 统 一 的 编 程 接 口 .使 其 子 类 表 现 从设计理念层面看 a s at l s和 i e ae。上面主要从 b t c a r c s n rc tf 出共 同的状态 和行为 。 但各 自的细节是不 同的。 子类共有的行为 语 法 定 义 和 编 程 的 角 度 论 述 了 a8 at as和 it fc bt c d 8 r ne ae的 区 r 由抽 象 类 中 的抽 象 方 法 来 约束 .而 子 类 行 为 的具 体 细节 则 通过 别 。 这些层面 的区别是 比较低 层次的、 非本质 的。以下将从 另一 抽象方法的覆盖来实现。 由于模块依赖于 一个 固定 的抽象体 . 因 个 层 面 : s at l s it ae所 反 映 出 的设 计 理 念 。来 分 析 b r s a t c ca 和 ne c f r 此它可 以是不允许修 改的 ; 同时 , 通过 从这个抽象 类派生 , 也可 下 二者 的 区别 。从 这 个 层 面 进 行 分 析 才 能 理 解 二 者 概 念 的 本 扩 展 此 模 块 的 行 为 功 能 。 熟悉 O P的 读 者 一 定 知 道 . 了 能够 质 所 在 。 C 为 上 文 中 已经 提 到 过 . s rt l s在 jv b a a a tc cs aa语 言 中 体 现 了 一 实现面向对象设计的一个最核心 的原 则 O PO e — l e r . C (p n Co dPi s n c l)抽 象 类 是其 中 的关 键 所 在 i e. p 种继 承关 系 , 想 使 得 继 承 荧 系 合理 。 类 和 派 生 类 之 间 必须 存 要 父

详细解析Java中抽象类和接口的区别【达内科技java培训】

详细解析Java中抽象类和接口的区别【达内科技java培训】

详细解析Java中抽象类和接口的区别【达内科技java培训】在Java语言中,abstract class 和interface 是支持抽象类定义的两种机制。

正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。

abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于abstract class和interface的选择显得比较随意。

其实,两者之间还是有很大的区别的,对于它们的选择甚至反映出对于问题领域本质的理解、对于设计意图的理解是否正确、合理。

本文将对它们之间的区别进行一番剖析,试图给开发者提供一个在二者之间进行选择的依据。

理解抽象类abstract class和interface在Java语言中都是用来进行抽象类(本文中的抽象类并非从abstract class翻译而来,它表示的是一个抽象体,而abstract class为Java语言中用于定义抽象类的一种方法,请读者注意区分)定义的,那么什么是抽象类,使用抽象类能为我们带来什么好处呢?在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样。

并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

抽象类往往用来表征我们在对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。

比如:如果我们进行一个图形编辑软件的开发,就会发现问题领域存在着圆、三角形这样一些具体概念,它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念。

正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。

在面向对象领域,抽象类主要用来进行类型隐藏。

我们可以构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。

抽象类和接口的相同和异同点

抽象类和接口的相同和异同点

抽象类和接口的相同和异同点声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。

不能创建abstract 类的实例。

然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。

接口(interface)是抽象类的变体。

在接口中,所有方法都是抽象的。

多继承性可通过实现这样的接口而获得。

接口中的所有方法都是抽象的,没有一个有程序体。

接口只可以定义static final成员变量。

接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。

在编写对象的时候会对一些类的方法进行定义。

但是并没有具体的实现。

而是把它们放到子类中去实现,具有灵活性。

在抽象类中可以有抽象方法,也可以没有抽象方法。

但是有了抽象方法的类一定是抽象类。

抽象类和接口在JA V A中都是用来表述抽象类的。

在面向对象的概念,所以的对象都是通过类来描述的。

但反之则不行。

若是一个类中没有包含足够的信息描绘一个具体的对象,这个的类就是抽象类。

在JA V A中除了使用抽象类来实现一定程度的抽象外还可以定义一种特殊的抽象方法----接口(interface)。

和抽象类的方法不一样,在抽象类中需要加上关键字abstract来表明某个方法是抽象的,但是在接口中则不需要。

相同点:1.他们都能不能生成实例,都有抽象方法。

2接口是特殊的抽象类。

3.接口和抽象类的继承都使用的关键字是extends。

不同点:1.接口的定义的变量默认是public static final型,且必须给其赋初值。

所以在实现类中不能重新定义,也不能改变其值。

而在抽象类中其值在子类中可以重新定义也可以重新赋值。

2.接口的方法默认的都是public abstract类型的。

3.抽象类中可以有构造器,但是接口中除了抽象方法什么都没有。

4.名字不同,接口写的是public interface Shape{};而抽象类写的是public abstract class Shape{};接口里全部都是抽象方法。

深入理解抽象类和接口的区别

深入理解抽象类和接口的区别

深入理解abstract class和interface城市WebClub2003-12-10 13:51:195816 次浏览abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在。

从语法定义层面看abstract class和interface在语法层面,Java语言对于abstract class和interface给出了不同的定义方式,下面以定义一个名为Demo 的抽象类为例来说明这种不同。

使用abstract class的方式定义Demo抽象类的方式如下:abstract class Demo {abstract void method1();abstract void method2();…}使用interface的方式定义Demo抽象类的方式如下:interface Demo {void method1();同样,如果不能在抽象类中定义默认行为,就会导致同样的方法实现出现在该抽象类的每一个派生类中,违反了"one rule,one place"原则,造成代码重复,同样不利于以后的维护。

因此,在abstract class和interface 间进行选择时要非常的小心。

从设计理念层面看abstract class和interface上面主要从语法定义和编程的角度论述了abstract class和interface的区别,这些层面的区别是比较低层次的、非本质的。

本小节将从另一个层面:abstract class和interface所反映出的设计理念,来分析一下二者的区别。

作者认为,从这个层面进行分析才能理解二者概念的本质所在。

前面已经提到过,abstarct class在Java语言中体现了一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在"is a"关系,即父类和派生类在概念本质上应该是相同的(参考文献〔3〕中有关于"is a"关系的大篇幅深入的论述,有兴趣的读者可以参考)。

java 容易混淆的问题

java 容易混淆的问题

abstract class和interface的区别在Java语言中,abstract class和interface是支持抽象类定义的两种机制。

正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。

abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于abstract class和interface的选择显得比较随意。

其实,两者之间还是有很大的区别的,对于它们的选择甚至反映出对于问题领域本质的理解、对于设计意图的理解是否正确、合理。

abstract class和interface在Java语言中都是用来进行抽象类(本文中的抽象类并非从abstract class翻译而来,它表示的是一个抽象体,而abstract class为Java语言中用于定义抽象类的一种方法)定义的,那么什么是抽象类,使用抽象类能为我们带来什么好处呢?声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。

不能创建abstract 类的实例。

然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。

不能有抽象构造函数或抽象静态方法。

Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。

取而代之,在子类中实现该方法。

知道其行为的其它类可以在类中实现这些方法。

接口(interface)是抽象类的变体。

在接口中,所有方法都是抽象的。

多继承性可通过实现这样的接口而获得。

接口中的所有方法都是抽象的,没有一个有程序体。

接口只可以定义static final成员变量。

接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。

当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。

接口与抽象类的区别与应用场景对比

接口与抽象类的区别与应用场景对比

接口与抽象类的区别与应用场景对比一、接口与抽象类的定义及特点在面向对象编程中,接口(interface)和抽象类(abstract class)是两种常用的抽象概念,它们都能够用来定义一种规范或者约束,但在使用时有着不同的特点和应用场景。

接口(Interface)接口定义了一组方法的签名,但不包含方法的实现。

一个类可以实现一个或多个接口,从而保证了这些方法在该类中都会被实现。

接口中的方法都是抽象的,而且只能包含常量和抽象方法。

接口是一种轻量级的抽象形式,用于描述类的行为,而不关心具体的实现细节。

抽象类(Abstract Class)抽象类本身无法被实例化,它包含了抽象方法以及普通方法。

抽象方法是没有具体实现的方法,必须在子类中被实现;而普通方法则可以有具体的实现。

抽象类可以包含属性、方法、构造函数等,其目的在于为其子类提供一个通用的模板或者骨架,以便于子类进行扩展或者重写。

二、接口与抽象类的区别1. 设计目的不同接口是用来描述类的行为或者能力,强调的是“做什么”的问题;而抽象类则是用来提供一个具体类的模板或者骨架,强调的是“怎么做”的问题。

2. 实现方式不同接口只能包含抽象方法和常量,而抽象类可以包含抽象方法、普通方法以及属性等。

一个类可以实现多个接口,但只能继承一个抽象类。

3. 灵活性不同由于一个类可以实现多个接口,因此接口提供了更大的灵活性;而抽象类在一定程度上限制了类的继承关系,因为Java是单继承的。

4. 扩展性不同抽象类可以包含成员变量和普通方法,可以为子类提供一些通用的方法或者属性;而接口只有抽象方法和常量,无法包含成员变量,因此扩展性相对较弱。

三、接口与抽象类的应用场景对比1. 接口的应用场景•当多个类具有相似的行为,但实现方式不同的时候,可以使用接口来定义这些行为;•当希望强制实现某些方法,但不关心具体实现时,可以使用接口;•当希望一个类实现多个不相关的行为时,可以使用接口来实现多继承的效果。

接口和抽象类

接口和抽象类
void method2();

}
在abstract class方式中,Demo可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface方式的实现中,Demo只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在interface中一般不定义数据成员),所有的成员方法都是abstract的。从某种意义上说,interface是一种特殊形式的abstract class。
void open() { … }
void close() { … }
void alarm() { … }
}
这种实现方式基本上能够明确的反映出我们对于问题领域的理解,正确的揭示我们的设计意图。其实abstract class表示的是"is a"关系,interface表示的是"like a"关系,大家在选择时可以作为一个依据,当然这是建立在对问题领域的理解上的,比如:如果我们认为AlarmDoor在概念本质上是报警器,同时又具有Door的功能,那么上述的定义方式就要反过来了。
abstract class Door {
abstract void open();
abstract void close();
}
interface Alarm {
void alarm();
}
class AlarmDoor extends Door implements Alarm {
解决方案二:
既然open、close和alarm属于两个不同的概念,根据ISP原则应该把它们分别定义在代表这两个概念的抽象类中。定义方式有:这两个概念都使用abstract class方式定义;两个概念都使用interface方式定义;一个概念使用abstract class方式定义,另一个概念使用interface方式定义。

Java中抽象类与接口的比较

Java中抽象类与接口的比较

Java中抽象类与接口的比较摘要:在Java语言中,抽象类(abstract class)和接口(interface)是支持抽象类定义的两种机制。

正是由于这两种机制的存在,才赋予了Java强大的面向对对象的功能。

抽象类和接口之间存在着很多相似性,但是又有本质的区别。

对于初学者而言,在使用时很难界定到底采用者两种机制的哪一种。

本文具体分析了这两个概念的相同点和相异处。

关键词:Java;类;继承;抽象类;接口中图分类号:TP312 文献标识码:A文章编号:1007-9599 (2010) 11-0000-02The Comparison of Abstract Classes and Interfaces in JavaWang Lili(Foundation Department of Xuzhou Air Force College,Xuzhou221000,China)Abstract:In the Java language,the abstract class (abstract class) and interface (interface) is to support two mechanisms defined abstract class. It is because the existence of these two mechanisms,it gives the object-oriented Java powerful features.Between abstract classes and interfaces there are many similarities,but there are essential differences. For starters,very difficult to define in the end when in use which of those twomechanisms.This detailed analysis the same point and the differences about these two concepts.Keywords:Java;Class;Inheritance;Abstract class;Interface一、抽象类在Java程序设计中有时需要创建超类,该超类只定义了一个为所有子类共享的一般形式,至于细节则交给每一个子类去实现。

abstract class和interface有什么区别

abstract class和interface有什么区别

abstract class和interface有什么区别在Java语言中,abstract class和interface是支持抽象类定义的两种机制。

正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。

abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于abstract class和interface的选择显得比较随意。

其实,两者之间还是有很大的区别的,对于它们的选择甚至反映出对于问题领域本质的理解、对于设计意图的理解是否正确、合理。

abstract class和interface在Java语言中都是用来进行抽象类(本文中的抽象类并非从abstract class翻译而来,它表示的是一个抽象体,而abstract class为Java语言中用于定义抽象类的一种方法)定义的,那么什么是抽象类,使用抽象类能为我们带来什么好处呢?声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。

不能创建abstract 类的实例。

然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。

不能有抽象构造函数或抽象静态方法。

Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。

取而代之,在子类中实现该方法。

知道其行为的其它类可以在类中实现这些方法。

接口(interface)是抽象类的变体。

在接口中,所有方法都是抽象的。

多继承性可通过实现这样的接口而获得。

接口中的所有方法都是抽象的,没有一个有程序体。

接口只可以定义static final成员变量。

接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。

当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。

Java中interface接口与abstract class抽象类的区别

Java中interface接口与abstract class抽象类的区别

Java中interface接口与abstract class抽象类的区别Interface和abstract class是Java中实现多态的基础,都很有用,但也有一些区别:interface被继承时用的关键字是implements,而且可以同时implements 多个interface,而abstract class被继承时用的关键字是extends,而且只能同时extends一个abstract class。

interface内定义的方法都是public的,而abstract class内的则不一定。

interface内定义的成员对象都是static & final的,而abstract class不是interface的方法不能有默认实现,只有一个申明,而abstract class内申明abstract的方法不能有实现,非申明abstract的方法可以有默认实现。

interface被implements时,所有方法都必须被实现,必须申明是public的,而abstract class被extends时只有abstract的方法才必须被实现,别的有默认实现的直接被继承过来。

例子:public interface Instrument {int i = 5; //static & final//can't have method definitions:void play(); //automatically publicvoid adjust();}public abstract class AbstractCachedTable {public Hashtable table = new Hashtable();abstract public void refresh();public Object get(Object o) {Object target = null;target = table.get(o);return target;}}一般情况下,建议使用interface(因为能同时implements多个interface 的特性,能更好地实现多态),当需要有默认实现和成员对象时才考虑abstract class。

Abstract Classes and Interfaces - Harbor Mist抽象类与接口港雾

Abstract Classes and Interfaces - Harbor Mist抽象类与接口港雾
• solution: Give Shape an abstract method draw()
• now the class Shape is abstract, so it can’t be instantiated • the figure variable cannot contain a (generic) Shape, because it is
and breathe() methods
28-Dec-04
abstract-classes.ppt
6
why have abstract methods?
• suppose you have a class Shape that isn’t abstract
• Shape should not have a draw() method • each subclass of Shape should have a draw() method
• public interface Animatable { install(Panel p); display();
}Байду номын сангаас
• now you can write code that will display any Animatable class in a Panel of your choice, simply by calling these methods
• an interface may also contain constants (final variables)
28-Dec-04
abstract-classes.ppt
10
“constants”
• a constant is a variable, or field, that is marked final

Abstract Classes and Interfaces抽象类与接口共18页

Abstract Classes and Interfaces抽象类与接口共18页
Be careful not to over use abstract classes Every abstract class increases the complexity of your design
Every subclass increases the complexity of your design Ensure that you receive acceptable return in terms of functionality given the added complexity.
Note: UML represents abstract classes by displaying their name in italics.
Car - trunkCapacity: int
Truck - bedCapacity: int
What Are Abstract Classes Used For?
What is an Abstract class?
Superclasses are created through the process called "generalization"
Common features (methods or variables) are factored out of object classifications (ie. classes). Those features are formalized in a class. This becomes the superclass The classes from which the common features were taken become subclasses to the newly created super class

抽象类接口

抽象类接口

Java抽象类和接口的区别abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。

abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于abstract class 和interface的选择显得比较随意。

其实,两者之间还是有很大的区别的,对于它们的选择甚至反映出对于问题领域本质的理解、对于设计意图的理解是否正确、合理。

本文将对它们之间的区别进行一番剖析,试图给开发者提供一个在二者之间进行选择的依据。

理解抽象类abstract class和interface在Java语言中都是用来进行抽象类(本文中的抽象类并非从abstract class翻译而来,它表示的是一个抽象体,而abstract class为Java语言中用于定义抽象类的一种方法,请读者注意区分)定义的,那么什么是抽象类,使用抽象类能为我们带来什么好处呢?在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样。

并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

抽象类往往用来表征我们在对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。

比如:如果我们进行一个图形编辑软件的开发,就会发现问题领域存在着圆、三角形这样一些具体概念,它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念。

正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。

在面向对象领域,抽象类主要用来进行类型隐藏。

我们可以构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
A Class can only inherit from one superclass. However, a class may implement several Interfaces
How a transaction is computed is dependent on the transaction's type Note: This is polymorphism.
Transaction - computeValue(): int
RetailSale - computeValue(): int
Any class which contains an abstract method MUST also be abstract
Any class which has an incomplete method definition cannot be instantiated (ie. it is abstract)
StockTrade - computeValue(): int
Defining Abstract Methods
Inheritance is declared using the "extends" keyword
If inheritance is not defined, the class extends a class called Object
Abstract Classes and Interfaces
The objectives of this chapter are:
To explore the concept of abstract classes To understand interfaces To understand the importance of both.
When a class "implements" an interface, the compiler ensures that it provides an implementation for all methods defined within the interface.
Implementing Interfaces
Note: UML represents abstract classes by displaying their name in italics.
Car - trunkCapacity: int
Truck - bedCapacity: int
What Are Abstract Classes Used For?
private String make; private String model; private int tireCount; [...]
public class Car extends Vehicle {
private int trunkCapacity; [...]
public class Truck extends Vehicle {
Because of this, abstract classes cannot be instantiated
They act as place holders for abstraction
Abstract Class Example
In the following example, the subclasses represent objects taken from the problem domain.
The superclass represents an abstract concept that does not exist "as is" in the real world.
Abstract superclass:
Vehicle - make: String - model: String - tireCount: int
public int computeValue() {
[...]
RetailSale - compute class StockTrade extends Transaction {
public int computeValue() {
[...]
StockTrade - computeValue(): int
private int bedCapacity; [...]
Vehicle - make: String - model: String - tireCount: int
Car - trunkCapacity: int
Truck - bedCapacity: int
Often referred to as "concrete" classes
• Interfaces are implemented by classes using the "implements" keyword.
Declaring an Interface
In Steerable.java:
public interface Steerable {
public void turnLeft(int degrees); public void turnRight(int degrees); }
Often, the superclass does not have a "meaning" or does not directly relate to a "thing" in the real world
It is an artifact of the generalization process
What is an Abstract class?
Superclasses are created through the process called "generalization"
Common features (methods or variables) are factored out of object classifications (ie. classes). Those features are formalized in a class. This becomes the superclass The classes from which the common features were taken become subclasses to the newly created super class
public abstract class Transaction {
public abstract int computeValue();
Note: no implementation
Transaction - computeValue(): int
public class RetailSale extends Transaction {
Abstract Methods
Methods can also be abstracted
An abstract method is one to which a signature has been provided, but no implementation for that method is given. An Abstract method is a placeholder. It means that we declare that a method must exist, but there is no meaningful implementation for that methods within this class
Defining Abstract Classes
Inheritance is declared using the "extends" keyword
If inheritance is not defined, the class extends a class called Object
public abstract class Vehicle {
In Car.java:
public class Car extends Vehicle implements Steerable {
public int turnLeft(int degrees) {
[...] }
public int turnRight(int degrees) {
[...] }
Abstract Method Example
In the following example, a Transaction's value can be computed, but there is no meaningful implementation that can be defined within the Transaction class.
Be careful not to over use abstract classes Every abstract class increases the complexity of your design
Every subclass increases the complexity of your design Ensure that you receive acceptable return in terms of functionality given the added complexity.
Abstract classes can contain both concrete and abstract methods.
相关文档
最新文档