2

我有点不确定以下问题:

如果Launchable是 Java 接口,可以将哪些对象传递给以下方法?可以在此方法内的 item 上调用哪些方法?

public void prepareForLaunch (Launchable item) {
    // some code
}

我目前的答案是:
根据上述信息,唯一可以传递给方法的对象是实例化为接口的子类类型的对象Launchable。(?)可以在方法内的 item 上调用的方法必须是同一包中的公共方法或受保护方法。这些方法也必须用于Launchable对象的子类,因为它只存在于方法体定义可以存在的抽象和实际(具体)类中。

我想知道这里是否有人可以检查我的答案并添加任何建议。谢谢!

4

4 回答 4

4

您只能传入实现的类的实例Launchable(直接或通过从超类继承)。也可以传入null

在方法内部,您可以调用定义在Launchable(和Object)中的所有方法。

这些方法将在接口中定义Launchable,但在实际类中实现(Java 类型系统保证了这一事实,它不会让您拥有接口实现不完整的类,那些需要声明为抽象的,不能实例化)。

如果您需要调用任何其他方法,您需要知道所讨论的对象还实现了一些其他接口(或属于给定类),并首先对其进行类型转换。

于 2012-09-01T00:14:39.880 回答
1

既然你说这Launchable是一个接口,任何实现的类的实例Launchable都可以传递给prepareForLaunch. 任何实现的类Launchable都必须实现接口中定义的方法,因此任何方法Launchable都可以调用给给定的对象prepareForLaunch

于 2012-09-01T00:17:49.613 回答
1

你对第一部分是正确的。关于您可以调用的方法:如果您不使用强制转换,那么您只能在同一个 Launchable 包中调用 public\protected。如果您将使用强制转换,您可以将可以调用的方法范围扩展到强制转换类中的方法。

考虑这段代码:

public interface Launchable
{
    public void aMethod();
}
public class SomeClass implements Launchable
{
    public void aMethod()
    {
    }
    public void bMethod(){}
}

无需铸造你就可以打电话

item.aMethod();

使用 Casting,您可以调用:

((SomeClass)item).bMethod();
于 2012-09-01T00:20:09.397 回答
-1

你应该使用implements声明,

public void prepareForLaunch() implements Launchbla {
}
于 2012-09-01T00:16:40.643 回答