저는 최근에 단순한 클래스를 구형 클라이언트 버전의 레거시 버전과 별도의 인터페이스로 마이그레이션 한 최신 버전의 두 가지 버전으로 나눠야했습니다.인터페이스 구현을 오버로드해도 괜찮습니까?
일반적인 코드가 많으므로이를 2 개의 구체적인 클래스가있는 추상 클래스로 분할했습니다. 구조에서 다음과 같이 : AbstParentClass 또한이 인터페이스의 자녀를 구현 ParentInt 두 구체적인 클래스를 구현하기 때문에 발생할 수있는 함정이 있는지 내가 궁금하네요 것은
interface ParentInt {
// Common methods
}
interface ChildIntA extends ParentInt {
// Legacy methods
}
interface ChildIntB extends ParentInt {
// New model methods
}
abstract class AbstParentClass implements ParentInt {
// ...
}
class LegacyConcreteClass extends AbstParentClass implements ChildIntA {
// ...
}
class NewConcreteClass extends AbstParentClass implements ChildIntB {
// ...
}
? 이 상황에 더 좋은 패턴이있을 수 있습니까?
내 코드는 현재 AbstParentClass에이 지시어가 구현되어 있는지 여부에 관계없이 모두 작동합니다. 실제로 두 개의 구체적인 클래스가 서로 다른 스레드에서 개별적으로 인스턴스화되기 때문에 AbstParentClass는 실제로 다른 곳에서 직접 참조되지 않습니다.
내 경우 인터페이스는 API의 일부이므로 내 POV에서 변경할 수 없습니다.
서로 확장하더라도 원하는만큼 많은 인터페이스를 상속 할 수 있어야합니다. 그러나 하나 이상의 클래스에서 상속받을 수는 없습니다 (그렇지만 그렇게하지 않아도됩니다.) – span
자식 선언에서 누락 된 "AbstParentClass 확장"에 대해 모든 사람이 의견을 말합니다. 이것이 분명히 실제 코드가 아니기 때문에 그것은 단지 감시 였을 것이라 확신합니다. 우리가 실제 상황을 논의 할 수 있도록 그 선언을 추가했습니다. –
고마워요, 어니스트, 네 말이 맞아, 그건 내 부분에 대한 감시 였어. –