2
public class Horse extends Animal {
    private Halter myHalter = new Halter();
    public void tie(LeadRope rope) {
        myHalter.tie(rope); // Delegate tie behavior to the
        // Halter object
    }
}
public class Halter {
    public void tie(LeadRope aRope) {
        // Do the actual tie work here
    }
}

Horse 类中的 tie 方法是否覆盖 Halter 类中的 tie 方法?为什么 tie 方法声明和签名几乎一模一样?

4

2 回答 2

1

不,它没有覆盖 Halter 中的方法,因为 Horse 没有扩展 Halter。

这是一个代表的例子(如评论中所述)。也可能是 Facade 模式(将所有的马业务放在一个地方,即使它可以通过直接通过所有其他类来完成)。

这就是 IS-A 和 HAS-A 关系之间的区别。马有缰绳(但它不是缰绳)。

为什么 tie 方法声明和签名几乎一模一样?

因为他们做同样的事情:将接收器系在引导绳上。

碰巧的是,你可以将缰绳和马都系在绳子上。但在其他方面,它们是完全不同的动物(实际上,它们中只有一个是动物)。

有些人会争辩说,这可以在Tieable接口中抽象出来。然后调用代码可以将铅绳绑在马和缰绳上(可能还有其他东西),而无需知道任何一个。

于 2012-11-16T04:26:28.763 回答
0

不,它没有覆盖tie您看到的方法,Horse它没有扩展Halter类。

方法名称保持不变,以便您可以从具有相同名称的类的实例中调用Halter类方法。tieHorse

tie它只是将类方法的方法调用包装在Halter类的方法(具有相同的签名)中Horse

于 2012-11-16T04:25:18.027 回答