Java如何使A类具有多个潜在的扩展能力

时间:2017-11-15 17:42:06

标签: java inheritance design-patterns

您好我的遗产问题。

让我们来看看这三个:

           A
         /   \
        /     \
       B       C
       \       /
        \     /
           ?
           |
           D


    abstract class A {
        public abstract void print();
        public abstract int getInt();
    }

    abstract class B extends A {
        @Override
        public int getInt() {
          return 5;
        }
    }

    abstract class C extends A {
        @Override
        public int getInt() {
           return 1;
        }
    }


    class D extends B || C {
        @Override
        public void print() {
         console.log(this.getInt());
       }
    }

我想添加一个可以从B或C中脱颖而出的D类。

当我创建一个新的D()时,我可以选择父级。我不想使用多重继承(java也不能这样做),我想通过改变父类的实现来使用一种方法在类上添加特定的comportment。

实际上 D 应该来自 A ,但是我可以在运行时选择 B或C 的特殊实现。我们可以认为B和C不允许实现除A之外的其他方法。

可能吗?

1 个答案:

答案 0 :(得分:0)

C ++具有多重继承,并且在设计Java时,不是引入多继承 interfaces ,而是提供代码替代,并防止歧义和其他多重继承问题。

可以使用委派,然后解决正确的多次调用的策略与该类一起使用。

class D extends A {
    B b;
    C c;

    @Override
    public int getInt() {
      return b.getInt() + c.getInt();
    }
    ...
}

class D extends A {
    A delegatee;

    public final void iAmReally(A a) {
        delegatee = a;
    }

    @Override
    public int getInt() {
      return delegatee.getInt();
    }
    ...
}