有效的Java项目19-仅使用接口来定义类型

时间:2012-07-28 22:24:22

标签: java interface dynamic-binding

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

因此,我的实际问题是,我只是真正使用接口来确保我的抽象类(或子类)明确地为方法提供实现吗?这似乎与第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();
}

3 个答案:

答案 0 :(得分:5)

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

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

相关问题here

答案 1 :(得分:1)

当您需要仅A的方法时,A可以用作对象的类型,如图所示。同样适用于B。如果你需要两者的方法,你可以创建一个新的界面:

public interface C extends A, B {
}

允许接口extend多个接口。

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

public abstract class D implements C {
  // implementation details
}

答案 2 :(得分: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();

      }
}
无论如何,我喜欢Jorn做得更好。