چون در جاوا نمی توان از یک کلاس final ارث برد برای افزودن قابلیت به آن یا بهبود یک قابلیت آن می توان از composition استفاده کرد. کلاس final زیر را در نظر بگیرید:
public final class FinalClass {
public String testMethod(String message) {
return "test-"+message;
}
}
اگر بخواهیم functionality متد testMethod را تغییر دهیم می توانیم یک instance از آن در کلاس جدید تعریف کنیم و متد جدید با همان نام تعریف می کنیم که از متد اصلی استفاده می کند:
public class WrapperClass{
private FinalClass finalClass = new FinalClass();
public String enhancedTestMethod(String message) {
String ret = finalClass.testMethod(message);
return "enhanced-"+ret;
}
}