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方法的声明和签名几乎完全相同?

最佳答案

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

这是一个委托的示例(如评论中所述)。也许也是Facade模式(将所有的马术交易集中在一个地方,即使可以直接通过所有其他类来完成)。

这就是IS-A和HAS-A关系之间的区别。一匹马有背心(但不是背心)。


  为什么tie方法的声明和签名几乎完全相同?


因为他们做同样的事情:将接收器绑在铅绳上。

碰巧的是,您既可以将马笼头也可以将马绳系在一起。但在其他方面,它们是完全不同的动物(实际上,其中只有一只是动物)。

有人会认为这可以在Tieable接口中抽象出来。然后,调用代码可以将铅绳绑在马匹和吊带衫上(可能还有其他东西),而无需了解两者。

09-28 03:36