0

我有一个实现两个接口的抽象类。我的想法是否正确因为我使用了两个接口,我不能使用任何一个接口来实现动态绑定?原因是如果我要使用其中一个接口,我显然无法从另一个接口调用方法,因为类型系统只允许子类型调用由我用来声明多态变量的接口定义的方法?

因此,我的实际问题是,我只真正使用接口来确保我的抽象类(或子类)肯定提供方法的实现是否可以?这似乎与第 19 条所说的相矛盾——你应该只对类型使用接口(我认为这意味着多态性)。

例子:

public interface A{
    public void meth1();
}

public interface B{
    public void meth2();
}

public abstract class C implements A,B{

}

public void DynamicBinding(A aobject){
  //Can only call aobject.meth1();
}
4

3 回答 3

5

您可以使用泛型让您的方法采用 A 和 B 类型的参数:

public <T extends A & B> void method(T param) {
  param.meth1(); // fine
  param.meth2(); // also fine
}

相关问题在这里

于 2012-07-28T22:43:18.943 回答
1

当您需要方法时,才A可以A将其用作对象的类型,如您所说明的那样。同样对于B。如果您需要两者的方法,请创建一个新接口:

public interface C extends A, B {
}

接口允许extend多个接口。

然后,如果您愿意,可以添加一个具有默认实现的抽象类:

public abstract class D implements C {
  // implementation details
}
于 2012-07-28T22:39:05.573 回答
0

你可以做

public void DynamicBinding(C cobject){
  c.meth1();
  c.meth2();
}

或更糟糕的变体

public void DynamicBinding(A aobject){
if(aobject instanceof C)
      {
          C myC=(C)aobject;
          myC.meth1();
          myC.meth2();

      }
}

无论如何,我喜欢乔恩做得更好。

于 2012-07-28T22:57:35.097 回答