分享
 
 
 

Java之旅(10)多态性 (续) & 接口(interface)

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

1> 在了解了多态性的一些概念后,我们再来看看类的设计

在类的继承方式里有种方式叫“纯继承”就像下图

由于有着相同的接口,基类可以接受任何发送给派生类的消息。你所要做的,只是将派生类的对象上传,然后就不再需要知道这个对象是什么类型的了。所有的对象都交由多态性来处理。看起来这是一个很好的办法,但事实是很多时候你的派生类都会有比基类更多的接口或者方法比如下面这个图。

看起来这才是实际中常常用到的情形,但同时它也带来了一个缺点,不能通过基类访问派生类的扩展方法,如果在程序中出现了这样的错误,系统会抛出一个ClassCastException 的异常,这种运行时的类型检查被称为“运行时的类型鉴别run-time type identification (RTTI)” 关于RTTI在后面的学习中还有更详细的介绍。

最后有个重要的概念再重申一下:人们常常会将多态性同java的那些非面向对象的特性相混淆,比如方法的重载,它常常会被当作面向对象的特点介绍给大家。千万记住“不是后绑定的,就不是多态性”。(我也以为重载是多态性的一种体现 。汗~)

接口(interface)

interface关键词进一步强化了abstract的概念。你可以把它想成“纯的”abstract类。它能让开发人员定义类的形式:方法名,参数列表,返回值的类型,但是却没有方法的正文。interface也可以包括数据成员,但是它天生就是static和final的。interface只提供形式,不谈实现。

要创建一个实现了某个(或者某组)interface的类,就必须使用implements关键词。它的意思是,“interface要告诉你‘类长什么样子’,implements要告诉你‘它是怎么工作的’”

你可以把interface里的方法声明成public的,但是即便不讲,它们也是public的(这是自动的)。所以当你implements一个interface的时候,你必须把这个interface的方法定义成public的。(除非你有特殊的用途要定义成其他的)

java的“多重继承”:

java并不强制你一定要去继承abstract还是“具体”的类,但是你只能继承一个非interface的类。但是你可以根据据需要实现任意多个interface,这样你就能创建一个类似c++中“多重继承”的类。

接口的真正目的:能够上传到多个基本类型。接口的令一个作用是和“把abstact类用作基类”完全相同的:就是要禁止客户程序员去创建这个类的对象,并且重申这是一个接口。

到底是用interface还是abstract类?

interface既给了你abstract类的好处,又给了你interface的好处,因此只要基类的设计里面可以不包括方法和成员变量的定义,你就应该优先使用interface。

接口继承:

通常情况下,extends只能用于类,但是由于一个interface可以由多个接口拼接而成,因此创建新的一个interface的时候可以使用extends来表示其多个“基接口”。

//////////////////////////////////////////////////////////////////////////////////////////////////

interface Monster

{

void menace();

}

interface DangerousMonster extends Monster

{

void destroy();

}

interface Lethal

{

void kill();

}

interface Vampire extends DangerousMonster, Lethal

{

void drinkBlood();

}

///////////////////////////////////////////////////////////////////////////////////////////////

常量的分组:由于interface数据成员自动就是static和final 的,因此interface是一种非常方便的,创建一组常量值的工具,这点同c和c++里的enum很类似。例如:

///////////////////////////////////////////////////////////////////////////////////////////////////

public interface Months

{

int

JANUARY = 1, FEBRUARY = 2, MARCH = 3,

APRIL = 4, MAY = 5, JUNE = 6, JULY = 7,

AUGUST = 8, SEPTEMBER = 9, OCTOBER = 10,

NOVEMBER = 11, DECEMBER = 12;

}

////////////////////////////////////////////////////////////////////////////////////////////////////////

为了安全期间可以把上面封到一个包里,不过最终你得到的只是一个int,看起来还是不如enum安全。不过抛开interface,我们可以创建一个final类,定义上一些static final的对象就没问题了。

提示:1,There’s also a month field in java.util.Calendar.

2,Apache的Jakarta Commons项目下包含了一些创建枚举类型的工具,参见http://jakarta.apache.org/commons,下面的 “lang,”在org.apache.commons.lang.enum.这个包里。 这个项目里面还有一些别的有用的类库。

下次将要看的是内部类。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有