0

我正在使用这个库,我不得不重写一些超类中的一些方法。我现在要做的是扩展我需要的类并重新定义我需要从它的超类中覆盖的方法。

class A { ... }

class B extends A { ... }

class C extends A { ... }

class myD extends B {

    protected void overriddenAfunction() { ... }

}

当多个类扩展同一个超类并且我希望所有子类使用相同的覆盖方法时,这显然不是很好(比如如果 C 也需要相同的 overridenAFunction() 定义)。

有没有一些设计模式或方法可以让它变得漂亮?我想象你可以做这样的事情:

class A { ... }

class B extends A { ... }

class C extends A { ... }

class myD extends A {

    private A BorC = null;

    public myD(A BorC) {

        this.BorC = BorC;

    }

    protected void overriddenAfunction() { ... }

    public void overriddenBfunction() { 

        ((B) BorC).overriddenBfunction();

    }

    public void overriddenCfunction() { 

        ((C) BorC).overriddenCfunction();

    }

}

Usage:

A testB = new myD(new B());
A testC = new myD(new C());

但是,如果它甚至可以工作,我需要输入 B 和 C 中的每种方法。

有没有更好的方法或解决方法?我想做的就是避免重新打包库,尽管我猜这确实是最好的解决方案?

我想我也可以复制 B 和 C 并让它们扩展 myD 而 myD 扩展 A。这个库也有所有可用的源文件,所以我可以这样做或类似的事情。

4

1 回答 1

0

没有办法以A允许BC受益于新功能的方式覆盖。我只能看到两个选项,并且您都提到了它们:

  • 重写A并重新打包库
  • MyDextend A,然后制作Band Cthat extend的副本MyD
于 2012-07-20T09:14:21.747 回答