接口编程

时间:2014-03-19 08:10:39

标签: java interface

在接口中,您声明一个将接口作为参数的方法,如

public interface testInterface{
  public void TestMethod(SomeInterface in);

}

当你在实现这个接口的类中实现这个方法时,参数是否需要再次(SomeInterface in)(最常见的形式),还是只能是实现SomeInterface的接口?如果第一个成立,我需要演员还是什么?

更新:我的意思是,如果实现类中的方法签名必须以(SomeInterface in)作为参数,或者它是否可以是实现(SomeInterface in)的特定类

6 个答案:

答案 0 :(得分:2)

你不必演员;您可以将参数的任何子类作为参数传递。

否则,Object's .equals()永远不会有效!它接受Object作为参数,但您可以"foo".equals("bar")

无论如何,你无法构建一个新的接口实例(除非你创建一个匿名类)。你必须提供一个实现......

答案 1 :(得分:1)

代替SomeInterface in,您可以传递任何实现SomeInterface的类。

答案 2 :(得分:1)

只要您传递给方法TestMethod的实例实现SomeInterface或另一个扩展SomeInterface的接口,您就可以了。此外,Java中的方法应该从小写开始。而不是铸造你可能我们这样的泛型:

public interface TestInterface<T extends SomeInterface> {
    public void testMethod(T in);
}

答案 3 :(得分:1)

是的,您可以将实现SomeInterface的类的引用作为参数传递。

喜欢

class test implements SomeInterface{

SomeInterface in=new test();
public void TestMethod(in );
}

答案 4 :(得分:1)

  

我的意思是,如果实现类中的方法签名必须具有(SomeInterface in)作为参数,或者它是否可以是实现(SomeInterface in)的特定类

不,方法签名必须接受该接口。这失败了,例如:

interface FooInterface {
    public void doSomething();
}

class Foo implements FooInterface {
    public void doSomething() { }
}

interface BarInterface {
    public void myMethod(FooInterface f);
}

class Bar implements BarInterface {
    public void myMethod(Foo f) { }
    //                   ^----------------- Note
}

如果你试图编译它,你得到:

Bar is not abstract and does not override abstract method myMethod(FooInterface) in BarInterface
    class Bar implements BarInterface {

但是,如果您将Bar.myMethod定义为接受FooInterface,您当然可以使用Foo个实例来调用它,因为它是接口点。

答案 5 :(得分:0)

您可以预先设置interface-method-declaration

的3个部分
  • 返回类型(impl的类型必须继承接口的类型)
  • 异常类型(接口的类型必须继承impl的类型或者impl的类型必须继承接口的类型)
  • 参数类型(impl的类型必须继承接口的类型)

示例:

interface Test {
    Number test(CharSequence v) throws IllegalArgumentException;
}

默认地将Impl:

public class TestImpl implements Test {
    public Integer test(final String v) throws NumberFormatException {
        return null;
    }
}

注意:

使用...的参数 - 数组可以继承[] - 数组。