有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Bates和Sierra java scjp第2章hasa

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


共 (2) 个答案

  1. # 1 楼答案

    不,它没有覆盖tie方法,正如您所看到的Horse没有扩展Halter

    方法名保持不变,以便可以从同名的Horse类的实例调用Haltertie方法

    它只是将对Halter类的tie方法的方法调用封装在一个来自Horse类的方法(具有相同的签名)中

  2. # 2 楼答案

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

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

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

    Why is the tie method declaration and signature almost exactly the same?

    因为他们做的事情是一样的:把听筒绑在牵引绳上

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

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