【问题标题】:Passing an instance of a class which implementing two interfaces as two different subtypes传递将两个接口实现为两个不同子类型的类的实例
【发布时间】:2012-08-02 17:41:12
【问题描述】:

如果我有:

public interface One{
    public void method1();
}

public interface Two{
    public void method2();
}

public class AClass implements One, Two{

}

public static void aDiffMethod1(One o){
    o.method1();
}

public static void aDiffMethod2(Two t){
    t.method2();
}

public static void main(String[] args){
     AClass a = new AClass();
     aDiffMethod1(a);
     aDiffMethod2(b);
}

有时在我的代码中,我会传递一个 AClass 的实例,因为它是接口 One 的子类型(换句话说,方法的参数类型将是 One,我将传递 AClass 类型),而在其他情况下有时我可能会传递 AClass 对象,知道它是接口 Two 的子类型(我传递给的方法的参数类型是 Two,所以我将 AClass 作为 Two 的子类型传递)。

可以以不同接口的子类型为幌子将 AClass 的实例传递给不同的方法吗?

这就是他们对接口编程的意思吗?这样就可以了吗?

【问题讨论】:

    标签: java oop interface polymorphism


    【解决方案1】:

    是的,这就是接口的全部意义所在。

    只接受接口One 的方法只会调用method1,所以这是安全的。只接受接口Two 的方法只会调用method2,所以再说一遍,这是安全的。

    【讨论】:

    • 这就是他们所说的界面编程短语的意思吗?
    • 是的,没错。编程使用对象,就好像它是接口一样。
    【解决方案2】:

    是的,这很好。如果一个方法需要一个接口实现,那么你的 AClass 就满足了这个约定。

    针对接口而不是针对实现进行编程是一种设计方法,您可以将行为操作分组到接口中,而不是将其放在主类中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多