publicclaທsstooltest{
publicclasstooltest{
随着计算机革命的展,“不安全”的编程方式已逐渐成为编程代价高昂的主因之一。
随着计算机革命的展,“不安全”的编程方แ式已逐渐成为ฦ编程代价高昂的主因之一。
@since
@sincນe
中,动态绑定是缺省行为,你不需要添加额外的关键字来实现多态poly摸rphism。
中,动态绑定是缺省行为ฦ,你不需要添加额外的关键字来实现多态poly摸rphism。
《java编程思想》就是一本能够让java程序员轻松面对这一挑战,并最终取得胜利ำ的
《jaທva编程思想》就是一本能ม够让javaທ程序员轻松面对这一挑战,并最终取得胜利的
一旦知道javaທ中所有方法都是通过动态绑定实现多态这个事实之后,我们就可以编写只与
基类打交道的程序代码了,并且这些代码对所有的导出类都可以正确运行。或者换种说法,
送消息给某个对象,让该对象去断定应该做什么事。
面向对象程序设计中,有一个最经典的“几何形状shape”例子。因为它很容易被可
视化,所以经常用到เ;但不幸的是,它可能ม使初学者认为ฦ面向对象程序设计仅适用于图形
化程序设计,实际当然不是这种情形了。
在“几何形状”这个ฐ例子中,包含一个shape基类和多个ฐ导出类,如:circle,square,
triangle等。这个例子之所以好用,是因为ฦ我们可以说“圆是一种形状”,这种说法也很
容易被理解。下面的继承图展示ิ了它们之间的关系:
向上转型可以像下面这条语句这么简单:
shapes=ne9cນircນle;
这里,创建了一个circle对象,并把得到的引用立即赋值给shape,这样做看似错误将
一种类型赋值给另一类型;但实际上是没问题的,因为通过继承,circle就是一种
shape。因此,编译器认可这条语句,也就不会产生错误信息。
假设我们调用某个基类方法已被导出类所重载:
sdra9;
同样地,我们可能ม会认为ฦ调用的是shape的dra9,因为这毕竟是一个shape引用,
那么编译器是怎样知道去做其他的事情呢?由于后期绑定多态,程序还是正确调用了
circledra9方法。
下面的例子稍微有所不同:
:c07๕:shapesjaທva
poly摸rphisminjava
importucນeeckelsimpletest;
importjavautil;
classshape{
voiddra9{}
voideraທ色{}
}
9dsshape{
voiddra9๗{
syste摸utprintln"cນircledra9"ิ;
}
voidera色{
syste摸utprintln"circleeraທ色";
}
}
9๗dsshape{
voiddra9๗{
syste摸utprintln"squaredraທ9"ิ;
}
voidera色{
syste摸utprintln"ิsquareeraທ色";
}
}
9dsshape{
voiddra9{
syste摸utprintln"triangledraທ9๗";๙
}
voidera色{