在接口中,您声明一个将接口作为参数的方法,如
public interface testInterface{
public void TestMethod(SomeInterface in);
}
当你在实现这个接口的类中实现这个方法时,参数是否需要再次(SomeInterface in)
(最常见的形式),还是只能是实现SomeInterface
的接口?如果第一个成立,我需要演员还是什么?
更新:我的意思是,如果实现类中的方法签名必须以(SomeInterface in)
作为参数,或者它是否可以是实现(SomeInterface in)
的特定类
答案 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个部分示例:
interface Test {
Number test(CharSequence v) throws IllegalArgumentException;
}
默认地将Impl:
public class TestImpl implements Test {
public Integer test(final String v) throws NumberFormatException {
return null;
}
}
注意:
使用...
的参数 - 数组可以继承[]
- 数组。