相当于在Java中扩展最终类

时间:2010-01-27 16:47:06

标签: java

我知道在Java中我们无法扩展最终的类。但是,有没有其他方法可以让我获得延伸最终课程的效果?

因为我有一个满足我要求的最终课程,所以如果我能以某种方式重复使用它,那对我来说会有很大的帮助。

2 个答案:

答案 0 :(得分:28)

为最终类创建一个包装器?

这样的事情:

class MyClass {
    private FinalClass finalClass;

    public MyClass {
        finalClass = new FinalClass():
    }

    public void delegatingMethod() {
        finalClass.delegatingMethod();
    }
}

MyClass之类的包装器类不会被接受为FinalClass的实例。如果FinalClass实现了任何接口,您可以在MyClass中实现它们,以使类更相似。 FinalClass的任何非最终父母也是如此;在这种情况下,您的MyClass设计应与这些父类兼容。

甚至可以在运行时使用反射创建包装类。在这种情况下,您可以使用Proxy class。请注意,代理类确实需要深入了解Java类型系统。

答案 1 :(得分:3)

最简单的选择是编写一个包装器,它包含一个最终类的实例作为成员变量,并作为最终类的代理。

这样,很容易覆盖或扩展最终类的方法。