Java do stuff_对think in java中的问题

刚刚开始看,在下面的话中有点不明白:

若通过继承增添了一种新类型,如“三角形”,那么我们为“几何形状”新类型编写的代码会象在旧类型里一样良好地工作。所以说程序具备了“扩展能力”,具有“扩展性”。

以上面的例子为基础,假设我们用Java写了这样一个函数:

void doStuff(Shape s) {

s.erase();

// ...

s.draw();

}

这个函数可与任何“几何形状”(Shape)通信,所以完全独立于它要描绘(draw)和删除(erase)的任何特定类型的对象。如果我们在其他一些程序里使用doStuff()函数:

Circle c = new Circle();

Triangle t = new Triangle();

Line l = new Line();

doStuff(c);

doStuff(t);

doStuff(l);

那么对doStuff()的调用会自动良好地工作,无论对象的具体类型是什么。

这实际是一个非常有用的编程技巧。请考虑下面这行代码:

doStuff(c);

此时,一个Circle(圆)句柄传递给一个本来期待Shape(形状)句柄的函数。由于圆是一种几何形状,所以doStuff()能正确地进行处理。也就是说,凡是doStuff()能发给一个Shape的消息,Circle也能接收。

问,如上面提到的,shape和Circle、Triangle、Line这些是否需要建立程序上的逻辑关联,才能使doStuff产生反应?是否这种逻辑关联是程序系统自己认识,并不需要我去重新建立这种逻辑关联?

那如果程序系统已经设置了他们之间的逻辑关联的话,是否也就是说如果在常理上,两个事物是一种包含或继承的关系,都可以不用我在程序中另外设置他们之间的逻辑关联?如一个简单的例子车、船、飞机等是属于交通工具中的,那我在开始的程序中是否可以这样设置:void doStuff(vehicle s) {……};并在后面的程序代码中可以这样写

Circle c = new Car();

Triangle b = new Boat();

Line p = new Plane ();

doStuff(c);

doStuff(b);

doStuff(p);

这样doSutff()这个函数也能同所有的vehicle通信?

|

这应该是继承中讲的吧?

实际上,可以这么说这个问题:可以把子类对象的句柄赋给超类的句柄变量。也就是说,可以用超类的句柄来引用一个子类的对象,但只能访问超类定义的那部分对象。

如果你后面说的Car、Boat、Plane等都是继承(extends)于超类vehicle的话,那么是可以像你那么用的。

是不是我越说越糊涂了?:)

|

的确是这样。

|

只要你这些交通工具extends vehicle就一切ok了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值