gpt4 book ai didi

java - 为什么Java在输入类型是接口(interface),参数类型是实现类的情况下找不到合适的方法呢?

转载 作者:行者123 更新时间:2023-11-29 09:53:17 24 4
gpt4 key购买 nike

我有一个看起来像这样的类设置:

interface I{}

class A implements I{}
class B implements I{}
class C implements I{}

class D{
I a;
I b;

public D(I a, I b){
this.a = a;
this.b = b;
}

public void doSomething(){
D.someMethod(a, b);
}

public static someMethod(A, A){//do something}
public static someMethod(A, B){//do something}
public static someMethod(A, C){//do something}
public static someMethod(B, B){//do something}
public static someMethod(B, C){//do something}
}

我真的很惊讶地发现这不能编译;它会抛出一个错误,指出它无法为类型 II 找到合适的方法 someMethod。我认为它会起作用,因为如果 IABC 的父类(super class),它就会起作用。为什么 Java 不允许这样做?是否有任何解决方法,例如将 I 设为抽象类?

此外,这个模式是否有一个名称,这样我就不必一直将其称为“this”?

最佳答案

签名public static someMethod(A, A) 可以接受AA 的更多派生类型。同样,(A,B) 等签名。

您需要一个接受 (I,I) 的方法,以便用 ABC 你在上面勾勒出来的。可替代性沿着继承链向下延伸 - 您定义的形式参数必须是您希望共有的最不具体的类型,然后可以传入该类型的任何适当的继承者或实现者。

关于java - 为什么Java在输入类型是接口(interface),参数类型是实现类的情况下找不到合适的方法呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28285530/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com