接受对接口对象的引用的Java方法

时间:2012-09-01 00:09:33

标签: java methods interface

我对以下问题有点不确定:

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

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

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

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

4 个答案:

答案 0 :(得分:4)

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

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

这些方法将在Launchable接口中定义,但在实际类中实现(这是Java类型系统保证的事实,不会让你有不完整的接口实现的类,那些需要被声明为abstract而无法实例化。)

如果你需要调用任何其他方法,你需要知道有问题的对象也实现了一些其他接口(或者是给定的类),并首先进行类型转换。

答案 1 :(得分:1)

由于您声明Launchable是一个接口,因此可以将实现Launchable的任何类的实例传递给prepareForLaunch。任何实现Launchable的类都必须实现接口中定义的方法,因此Launchable的任何方法都可以调用给prepareForLaunch的对象。

答案 2 :(得分: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();

答案 3 :(得分:-1)

你应该使用implements声明,

public void prepareForLaunch() implements Launchbla {
}