Thinking In Java学习进程---对象的入门1.5 继承:重新使用接口

来源:互联网 发布:超级sql注入工具 使用 编辑:程序博客网 时间:2024/06/03 23:39

个人感觉1.4的讲解并不是很重要,而且概念性的东西比较薄弱,没有什么实质性的意义已经省略了,中间断了两天,么有继续写好了现在开始继续写1.5的笔记

继承:我们费尽心思做出一种数据类型后,假如不得不又新建一种类型,令其实现大致相同的功能,那会是一件非常令人灰心的事情。但若能利用现成的数据类型,对其进行“克隆”,再根据情况进行添加和修改,情况就显得理想多了。

继承并不完全等价于克隆,在继承过程中,若父类发生了变化,修改过的子类也会反映出这种变化。在Java语言中,继承是通过extends关键字实现的 使用继承时,相当于创建了一个新类。这个新类不仅包含了现有类型的所有成员(尽管private成员被隐藏起来,且不能访问),但更重要的是,它复制了基础类的接口。及子类继承父类的所有私有属性及私有方法。

有两种做法可将新得的子类与父类区分开。第一种做法十分简单:为衍生类添加新函数(功能)。这些新函数并非基础类接口的一部分。进行这种处理时,一般都是意识到基础类不能满足我们的要求,所以需要添加更多的函数。这是一种最简单、最基本的继承用法,大多数时候都可完美地解决我们的问题。然而,事先还是要仔细调查自己的基础类是否真的需要这些额外的函数。

尽管子类继承父类所有的属性和方法。当子类需要特定的函数 父类不包含此类函数还是需要子类单独创建一个函数来完成功能(个人的理解)

继承过程中 :等价与类似关系

针对继承可能会产生这样的一个争论:继承只能改善原基础类的函数吗?若答案是肯定的,则衍生类型就是与基础类完全相同的类型,因为都拥有完全相同的接口。这样造成的结果就是:我们完全能够将衍生类的一个对象换成基础类的一个对象!可将其想象成一种“纯替换”。在某种意义上,这是进行继承的一种理想方式。此时,我们通常认为基础类和衍生类之间存在一种“等价”关系——因为我们可以理直气壮地说:“圆就是一种几何形状”。为了对继承进行测试,一个办法就是看看自己是否能把它们套入这种“等价”关系中,看看是否有意义。但在许多时候,我们必须为衍生类型加入新的接口元素。所以不仅扩展了接口,也创建了一种新类型。这种新类型仍可替换成基础类型,但这种替换并不是完美的,因为不可在基础类里访问新函数。我们将其称作“类似”关系;新类型拥有旧类型的接口,但也包含了其他函数,所以不能说它们是完全等价的。

认识了等价与类似的区别后,再进行替换时就会有把握得多。尽管大多数时候“纯替换”已经足够,但您会发现在某些情况下,仍然有明显的理由需要在衍生类的基础上增添新功能(及子类重写父类的方法或者子类创建一个特殊类来完成自己的操作)。通过前面对这两种情况的讨论,相信大家已心中有数该如何做。

0 0
原创粉丝点击