- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第六章、类的继承
继承的思想与实现
继承的思想与实现
继承(inheritance)从原有的类中派生出新的类型,加入新的代码,但是并不会对原有的类产生任何的影响。简单地说就是一个类拥有另一个类的所有属性和方法,那么这两个类就之间的关系就是继承关系。被继承的类成为父类或超类,继承的类叫子类。这里涉及到的大部分工作都是由编译器完成。
Java里的继承和C++里的继承是不同的,C++是允许多继承的,即一个儿子可以有多个父亲,即同时继承多个父类的属性和方法,那么这就是说,如果一个系统过于复杂的话,对象之间的关系可能是一种及其复杂的网状结构,你很难断定你所编辑的子类的一些属性和方法是来自于哪个父类,所以维护和使用起来难度将会大大增加。但是Java在这一点上就简化了,Java仅仅允许单继承,也就是说一个子类只能有一个父类,但是一个父类还是可以有多个子类,就是依靠这种唯一性,可以很方便地维护一个类的继承系统。
那么继承能够为我们带来什么好处呢?继承其实是抽象的逆过程,我们在分析系统时往往要对纷繁复杂的对象系统进行分析和抽象,要尽量找出不同对象的相同点,从而最大限度的减少类的数目,如果一个系统的类过多,而且类之间有很多的冗余,这说明这个系统的抽象工作做的并不好。举个例子:现在有人、猴子、猩猩三中对象类型,有两种抽象,一种抽象是为每一个具体对象构建一个具体的类别,如人类、猴子类、猩猩类;还有一种抽象有四个类,一个父类:龄长类,三个子类:人类、猴子类、猩猩类。从表面上看,第二种抽象好像比第一种抽象更麻烦,构造的类也就更多。但是实际的效果却是第二种抽象更加合适一些,假如没有将龄长类抽象出来的话,那么人类、猴子类及猩猩类的所有共同点,无论是体形、行为都必须在每个类中重复,我们知道他们的相同点一定大于不同点,如果我们分别来描述各个类型,会发现这些类之间有非常多的重复的东西。而如果将龄长类抽象出来,其实猴子、猩猩以及人区别于龄长类的特点并不是很多,所以分别描述起来就非常方便。尤其在子类中描述的是区别,而共同点在父类中都已经描述过了。
但是抽象只是为了更加方便的组织类的层次结构,而真正描述系统还是靠的是实实在在具体的对象,这些对象又是从抽象的最底层的具体类实例化过来的,我们都知道抽象最底层的类是通过层层继承出来的,所以抽象是设计过程中的,而继承是在实现过程中的。没有抽象-继承的过程,描述系统就是“就事论事”的过程,而这种过程被认为是不可取的。
对于继承,也有标准的画法,一个从子类指向父类的箭头表明一个继承关系,如下图5-1所示:
在Java语言中,继承的保留字为extends,如上例所示,继承的语句应该写成如下形式:class 猴子 extends 龄长类{……}、class 猩猩 extends 龄长类{……}、class 人 extends 龄长类{……}。
属性的继承与方法的继承
我们知道如果一个类是从另一个类中继承而来,那么其父类的某些属性和方法能够被子类继承,下面我们先来讨论类属性的继承问题。
属性的继承
【例程6.2.1】
——文件FieldExtend.java—— /***************************************************************************************************
* Java编程思想第6章教学例程,关于类的属性的继承问题(2001/09/26)
* @author 许炜
* @version 1.0
* @since jdk1.3
***************************************************************************************************/
class Father{
private int a=1;
int b=2;
protected int c=3;
public int d =4;
}
public class FieldExtend extends Father{
/*** 主控方法
* @param 命令行参数入口(程序中未用到)
* @return void
*/
public static void main( String[] args )
{
FieldExtend son = new FieldExtend();
Father fa = new Father();
fa.b=100;
son.b=200;
//System.out.println(子类私有成员a= + son.a);
System.out.println(子类友好成员b= + son.b);
您可能关注的文档
最近下载
- 五年级下册劳动日常收纳教案.docx VIP
- 2025年孝感市政务服务中心(综合窗口)人员招聘笔试考试题库及答案解析.docx VIP
- 数学-广东省衡水金卷2025届高三上学期10月联考.docx VIP
- topworx D系列阀门控制器安装调试维护手册.pdf VIP
- 关于四川省引大济岷工程环境影响报告书的批复.docx VIP
- ATmegaS128_部分辐射报告Rev3.pdf VIP
- 怎样收纳整理物品课件.ppt VIP
- 文旅新媒体运营 课件 第7、8章 文旅新媒体的数据运营、文旅新媒体运营技能 .pptx
- 《架空输电线路垂直起降固定翼无人机通道巡视技术规范》.pdf VIP
- 电梯使用单位题库-安全总监.docx VIP
原创力文档


文档评论(0)