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:

注:


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

给一直试图为我解决这个问题但我一直重复的人:谢谢。这是一个愚蠢、关键的打字错误。给一直试图为我解决这个问题但我一直重复的人:谢谢。这是一个愚蠢、关键的打字错误。