Java 通过接口编程
在接口中声明一个将接口作为参数的方法,如Java 通过接口编程,java,interface,Java,Interface,在接口中声明一个将接口作为参数的方法,如 public interface testInterface{ public void TestMethod(SomeInterface in); } 当您在实现此接口的类中实现此方法时,参数是否需要再次是(SomeInterface in)(最常用的形式),或者它可以只是实现SomeInterface的接口?如果第一个有效,我需要投还是什么 更新:我的意思是,如果实现类中的方法签名必须将(SomeInterface in)作为参数,或者它可以是
public interface testInterface{
public void TestMethod(SomeInterface in);
}
当您在实现此接口的类中实现此方法时,参数是否需要再次是(SomeInterface in)
(最常用的形式),或者它可以只是实现SomeInterface
的接口?如果第一个有效,我需要投还是什么
更新:我的意思是,如果实现类中的方法签名必须将
(SomeInterface in)
作为参数,或者它可以是实现(SomeInterface in)的特定类
代替中的SomeInterface,您可以传递实现SomeInterface的任何类。代替
中的SomeInterface,您可以传递实现SomeInterface的任何类。您不必强制转换;可以将参数的任何子类作为参数传递
否则,对象的
将无法工作!它接受对象
作为参数,但您可以执行“foo.equals”(“bar”)
无论如何,您不能构建接口的新实例(除非创建匿名类)。您必须提供一个实现…您不必强制转换;可以将参数的任何子类作为参数传递
否则,对象的
将无法工作!它接受对象
作为参数,但您可以执行“foo.equals”(“bar”)
无论如何,您不能构建接口的新实例(除非创建匿名类)。只要传入方法TestMethod
的实例实现了SomeInterface
或扩展了SomeInterface
的另一个接口,就必须提供一个实现…,这样就可以了。此外,Java中的方法应该以小写开头。您可以像这样使用泛型,而不是强制转换:
public interface TestInterface<T extends SomeInterface> {
public void testMethod(T in);
}
公共接口测试界面{
公共空隙试验方法(T-in);
}
只要传递给方法TestMethod
的实例实现了SomeInterface
或扩展了SomeInterface
的另一个接口,就可以了。此外,Java中的方法应该以小写开头。您可以像这样使用泛型,而不是强制转换:
public interface TestInterface<T extends SomeInterface> {
public void testMethod(T in);
}
公共接口测试界面{
公共空隙试验方法(T-in);
}
是,您可以将实现SomeInterface的类的引用作为参数传递
像
是的,您可以将实现SomeInterface的类的引用作为参数传递
像
我的意思是,如果实现类中的方法签名必须有(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不是抽象的,并且不会覆盖BarInterface中的抽象方法myMethod(FooInterface)
类栏实现了BarInterface{
但是如果您将Bar.myMethod
定义为接受FooInterface
,那么(当然)您可以用Foo
实例调用它,因为这是接口的要点
我的意思是,如果实现类中的方法签名必须有(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不是抽象的,并且不会覆盖BarInterface中的抽象方法myMethod(FooInterface)
类栏实现了BarInterface{
但是如果您将Bar.myMethod
定义为接受FooInterface
,您当然可以使用Foo
实例来调用它,因为这是接口的要点。您可以精确定义接口方法声明的三个部分
- 返回类型(impl的类型必须继承接口的类型)
- 异常类型(接口的类型必须继承impl的类型或impl的类型必须继承接口的类型)
- 参数类型(impl的类型必须继承接口的类型)
例如:
interface Test {
Number test(CharSequence v) throws IllegalArgumentException;
}
Impl:
注:
使用..
-数组的参数可以继承[]
-数组。您可以精确定义接口方法声明的3部分
- 返回类型(impl的类型必须继承接口的类型)
- 异常类型(接口的类型必须继承impl的类型或impl的类型必须继承接口的类型)
- 参数类型(impl的类型必须继承接口的类型)
例如:
interface Test {
Number test(CharSequence v) throws IllegalArgumentException;
}
Impl:
注:
使用..
-数组的参数可以继承[]
-数组。给一直试图为我解决这个问题但我一直重复的人:谢谢。这是一个愚蠢、关键的打字错误。给一直试图为我解决这个问题但我一直重复的人:谢谢。这是一个愚蠢、关键的打字错误。