您的位置:首页 > 编程语言 > Java开发

一 javase学习记录04

2017-03-28 20:57 274 查看


文章中内容部分来自《java核心技术卷1》 《java编程思想》大部分来自网络http://www.cnblogs.com/azai/archive/2009/11/10/1599584.html
java学习路线图  http://www.cnblogs.com/biehongli/p/5754555.html

一 抽象类和接口

1 包含抽象方法的类叫做抽象类

2 abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制

3 在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是 这样。并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类往往用来表征我们在对问题领 域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。

4 在面向对象领域,抽象类主要用来进行类型隐藏。我们可以构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。这个抽象描述就是抽象类,而这一组任意个可能的具体实现则表现为所有可能的派生类。模块可以操作一个抽象体。由于模块依赖于一个固定的抽象体,因此它可以是不允许修改的;同时,通过从这个抽象体派生,也可扩展此模块的行为功能。

5 abstract class在Java语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。

6 在abstract class的定义中,我们可以赋予方法的默认行为。但是在interface的定义中,方法却不能拥有默认行为,为了绕过这个限制,必须使用委托,但是这会增加一些复杂性,有时会造成很大的麻烦。

7 在抽象类中不能定义默认行为可能会造成维护上的麻烦。如果不能在抽象类中定义默认行为,就会导致同样的方法实现出现在该抽象类 的每一个派生类中,违反了"one rule,one place"原则,造成代码重复,同样不利于以后的维护。

8 abstarct class在Java语言中体现了一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在"is a"关系,即父类和派生类在概念本质上应该是相同的。对于interface 来说则不然,并不要求interface的实现者和interface定义在概念本质上是一致的,仅仅是实现了interface定义的契约而已。

9 abstract class表示的是"is a"关系,interface表示的是"like a"关系。抽象类要被子类继承,接口要被类实现。

10 抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。

11 接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现。接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。

12 抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。

13 抽象方法只能申明,不能实现。abstract void abc();不能写成abstract void abc(){}。抽象类里可以没有抽象方法。如果一个类里有抽象方法,那么这个类只能是抽象类。

14 抽象方法要被实现,所以不能是静态的,也不能是私有的。接口可继承接口,并可多继承接口,但类只能单根继承。

15 抽象类能够保证实现的层次关系,避免代码重复。如果依赖于抽象类来定义行为,往往导致过于复杂的继承关系,而通过接口定义行为能 够更有效地分离行为与实现,为代码的维护和修改带来方便。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: