Java에서는 최종 클래스를 확장 할 수 없다는 것을 알고 있습니다. 그러나 최종 수업을 연장하는 효과를 얻는 다른 방법이 있습니까?Java에서 최종 클래스를 확장하는 것과 같습니다.
내가 찾고있는 요구 사항을 가진 최종 수업이 있으므로 어떻게 든 다시 사용할 수 있다면 나에게 큰 도움이 될 것입니다.
Java에서는 최종 클래스를 확장 할 수 없다는 것을 알고 있습니다. 그러나 최종 수업을 연장하는 효과를 얻는 다른 방법이 있습니까?Java에서 최종 클래스를 확장하는 것과 같습니다.
내가 찾고있는 요구 사항을 가진 최종 수업이 있으므로 어떻게 든 다시 사용할 수 있다면 나에게 큰 도움이 될 것입니다.
마지막 클래스의 래퍼를 만드시겠습니까? 이 같은
뭔가 :
class MyClass {
private FinalClass finalClass;
public MyClass {
finalClass = new FinalClass():
}
public void delegatingMethod() {
finalClass.delegatingMethod();
}
}
MyClass
같은 래퍼 클래스가 FinalClass
의 인스턴스로 허용되지 않습니다. FinalClass
이 인터페이스를 구현하면 MyClass
에 인터페이스를 구현하여 클래스를 더 비슷하게 만들 수 있습니다. FinalClass
의 최종 부모가 아닌 경우에도 마찬가지입니다. 이 경우 귀하의 MyClass
디자인은 부모 클래스와 호환되어야합니다.
리플렉션을 사용하여 런타임 중에 래퍼 클래스를 만들 수도 있습니다. 이 경우 Proxy
class을 사용할 수 있습니다. 프록시 클래스는 Java 유형 시스템에 대한 심층적 인 지식이 필요합니다.
가장 간단한 옵션은 최종 클래스의 인스턴스를 멤버 변수로 포함하고 최종 클래스의 프록시 역할을하는 래퍼를 작성하는 것입니다.
이렇게하면 최종 클래스의 메서드를 재정의하거나 확장하는 것이 쉽습니다.
실제로 래핑되는 클래스가 일종의 인터페이스/추상 클래스를 구현하고 원본 대신 래퍼 인스턴스를 제공 할 수있는 경우에만 작동합니다. 이 중 하나를 수행 할 수 없다면 원본을 리팩토링하지 않아도됩니다. –
물론 FinalClass의 모든 인스턴스를 MyClass로 바꿀 수는 없습니다. 그러나 MyClass로 FinalClass를 래핑하기위한 인터페이스를 직접 정의 할 수 있습니다. FinalClass를 MyClass 외부에서 참조하지 마십시오. – Arne
@ArneJan, 다른 클래스의 'finalClass' 필드를 참조해서는 안된다는 뜻입니까? 왜? –