印佛西地 2001年08月07日10:29
1:在Java中使用继承
面向对象的程序设计中最为强大的功能是类的继承,类的继承允许你在一个已经存在的类之上编写新的程序,例如,你想建立一个可在屏幕上显示并能填充它的矩形类,你可以从头开始或者利用旧的矩形类,下面的部分将向你介绍如何继承已存在的Rectangle类,而不需重写其中的代码。
比如建立一个fillRect类,该类可以使用Rectangle类中所有已定义的数据和成员函数,如:width、height等数据和getArea等成员函数,就可是使用继承的方法来实现。使用extands关键字让Java程序员能够继承已有类的成员函数,为了继承Rectangle类,你必须引用旧的Rectangle类,你必须引用旧的Rectangle类,并且在新类的说明中引用它,比如:
importShapes.Rectangle;
classfillRectextandsRectangle
{
.....
}
2:成员函数的重载
继承之后,如何使fillRect类比Rectangle类有所提高呢?我们可以用如下代码来实现一个新的drawRect成员函数,它将大大缩短代码,并能填充矩形,而不是仅仅画出矩形的轮廓:
privateStringmakeString(chrch,intnum)
{
StringBufferstr=newStringBuffer();
for(inti=num;i>0;i--)
str.append(ch);
returnstr.toString();
}
publicvoiddrawRect()
{
for(inti=height;i>0;i--)
System.out.println(makeString("#",width));
}
注意这里我们使用了StringBuffer类。之所以使用StringBuffer是因为String只能产生一个静态类型--它的大小是不能改变的,而StringBuffer能够产生一个可变长度的字符串类型。
在这里,drawRect成员函数被重载了,通过使用相同的成员函数名字,你可以用新的成员函数来代替旧的成员函数。不过,那些被说明为final的成员函数是不能被重载的。
注意,你不必在新的类中包含那些与被继承类相同的代码,而只需要加入你想要的东西,但你必须建立一个新的构造成员函数,以区分这两个不同的类。
新类的全貌如下所示,你可以发现通过继承Rectangle类,代码变得非常简单明了。
classfillRectextandsRectangle
{
publicfillRect(intw,inth)
{
supper(w,h);
privateStringmakeString(charch,intnum)
{
StringBufferstr=newStringBuffer();
for(inti=num;i>0;i--)
str.append(ch);
returnstr.toString();
}
publicvoiddrawRect()
{
for(inti=height;i>0;i--)
System.out.printlm(makeString("#",width));
}
}
}
3:使用接口
Java可以创建一种称作接口(interface)的类,在这个类中,所有的成员函数都是抽象的,也就是说它们都只有说明没有定义,你可以如下所示来说明一个接口。
publicinterfaceinterfaceName
//成员函数说明
接口中成员函数的缺省引用类型是private,接口(interface)的内部变量是不可更改的,并且总是static和final。
通过使用关键字implement,你可以在定义类时继承一个接口。不过与extends不同的是,一个类可以同时继承多个接口。
使用接口的优点在何处呢?通过创建一个接口,你可以说明一整套抽象的成员函数而无须去具体实现它,所有继承了这个接口的类,都将有着具有相同原形的成员函数。例如,你想所有的shapes都有一个draw()成员函数,你可以创建一个接口并且用Shape命名:
publicinterfaceShape
voiddraw();
现在,无论你何时创建一个继承自Shape的类,都将拥有一个成员函数draw()。
4:类的转换
类的转换,与不同类型的变量之间的转换有相似之处,但并不一样。
我们可以把一个父类的对象转换成一个子类对象,下面的代码说明一个类转换的例子,其中Y类是从X类继承而来的:
Yy=newY();
Xx;
x=y;
需要注意的是两个子类之间的转换是不可以的。
5:null,this和supper变量
所有的类都有三种变量:null、this和supper。
null变量不指向任何实际对象,而是指向一个空对象,如下例所示:
Rectanglerect=null;
该例产生一个矩形类的变量,但不创建一个实际的对象。另外,假如一个成员函数需要一个对象作为参数时,你同样可以用null代替。
this变量指向对象本身,一个类可以通过this变量来获得一个代表它自身的对象变量。
supper变量是一个指向类父类构造成员函数的变量,你可以通过调用它,来迅速完成对子类的构造成员函数的设计。
分享到:
相关推荐
这种差异一方面反映了世界蛭类物种的多样性,另一方面也暗示中国在蛭类研究方面的巨大空间和潜力。 对于国内蛭类分类研究,目前仍然存在诸多亟待解决的问题,如物种鉴定精度不高、研究数据不够全面和系统化,以及...
大数据赋能的建筑类研究生城市设计教学实践是一项将大数据技术与城市设计教学相结合的研究,旨在通过大数据的客观性、动态性、全面性等优势,为城市设计的转型发展提供助力,并在研究生教育层面实现教学方法的创新与...
基于技术整合模型的教育类APP分类研究.pdf
###1、训练集来源 搜狗实验室提供的2006年新闻数据,根据TF-IDF值进行特征选取,10大类中每类选取200个特征词 ###2、模型准确度 5折法验证71.9%的准确率......求微博数据集! ###3、依赖包 使用@ansjsun 的ansj_...
"电子信息类研究生工程实践与创新能力培养研究" 本文对电子信息类研究生工程实践与创新能力培养的重要性进行了深入分析,并提出了基于PBL教学模式的培养工程实践与创新能力的具体措施。该研究的目的是为了解决电子...
本篇文章由郑炜和吴薇撰写的《我国生物区系研究概况及其在蝇类研究上的应用展望》介绍了我国在生物区系研究领域的整体状况,并着重于在蝇类研究上的应用及未来发展趋势。文章指出,生物区系研究对于理论和实践都具有...
在这样的背景下,提升经管类研究生的创新能力显得尤为重要。【经管类研究生】指的是攻读经济学和管理学专业研究生学位的学生,他们在新科技革命和创新驱动战略中扮演着关键角色。 【创新能力】是指在学术研究和实践...
标题中的“理工类研究生开题报告”指的是研究生在科研项目开始前撰写的文档,用于阐述研究主题、目标、方法及预期成果。这份报告通常包含研究背景、意义、文献综述、研究内容、技术路线和时间规划等内容。描述部分未...
本文探索了一种以培养创新能力为中心的计算机类研究生校企协同育人模式,旨在提高研究生的实践创新能力和解决实际工程问题的能力。该模式通过学位点平台建设、校企融合和育人过程来实现。文章首先分析了电子信息产业...
新工科背景下的机械类研究生创新能力提升是一项至关重要的任务,旨在培养符合新时代工程技术发展需求的高级人才。在当前快速变化的科技环境中,机械类研究生需要具备跨学科的知识基础、自主学习和分析问题的能力以及...
2.经管类研究者可投稿的中文社会科学引文索引(CSSCI扩展版),包括可发的81种C扩及其部分评价。 3.CSSCI(2021-2022)收录集刊目录(明确查明列出140种) 4.涉及经管领域的新版北核目录(可发的383种)包括发表难度...
【电子信息类研究生综合实践平台开发与教学设计】是关于如何提升电子信息类研究生实践教学质量的研究报告。该文重点分析了电子信息专业课程的公共核心内容,并基于工程创新应用的需求,设计了一套综合实践平台。 ...
大学生英语竞赛(NECCS)A类研究生决赛英语真题2018年.docx
微课在经济类研究生课程教学中的应用研究
国际宏观研究-华泰期货-宏观大类研究:类滞胀和冷冬预期进一步强化 关注相关配置机会.pdf
国际宏观研究-华泰期货-宏观大类研究:不必过度担忧美国加息风险 全球类滞胀情境延续.pdf
国际宏观研究-华泰期货-宏观大类研究:宽信用预期支撑人民币资产.pdf
国际宏观研究-华泰期货-宏观大类研究:变异病毒恐慌蔓延 全球开启避险模式.pdf