【问题标题】:Inheritance vs. Delegation [duplicate]继承与委托[重复]
【发布时间】:2017-11-07 12:25:03
【问题描述】:

下面的代码展示了如何通过继承重用方法 m()。代表团如何运作?谢谢!

  class A{
  int m();
  }

 class B extends A{}

 B b =new B()
 b.m();

【问题讨论】:

    标签: java inheritance delegation


    【解决方案1】:
    class B {
        int m() {
            return new A().m();
        }
    }
    

    class B {
        private A a = new A();
        int m() {
            return a.m();
        }
    }
    

    class B {
        private A a;
    
        public B(A a) {
            this.a = a;
        }
    
        int m() {
            return a.m();
        }
    }
    

    【讨论】:

      【解决方案2】:

      继承意味着 IS-A:“B 类的实例 IS-A 类的实例”。

      Composition 表示 HAS-A:“B 类的实例 HAS-A 类的实例”。

      像这样:

      class B {
      
          private A a;
      
          public B(A a) { this.a = a; }
      
          public int m() { return a.m(); }
      }
      

      B 类将其对 m() 的调用委托给其 A 类的实例。

      如果两者都实现一个通用接口会有所帮助。

      public interface DoSomething {
          int m();
      }
      
      class A implements DoSomething {
          public int m() { return 1; }
      }
      
      class B implements DoSomething {
      
          private A a;
      
          public B(A a) { this.a = a; }
      
          public int m() { return a.m(); }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-12
        • 2010-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多