나는 그것을 확장하는 추상 클래스와 몇 가지 구체적인 클래스를 가지고있다.자바, 상속 클래스에서 특정 추상 클래스 생성자를 호출하지 못하도록하는 방법은 무엇입니까?
추상 클래스에는 두 개의 생성자가 있습니다. 하나의 특정 클래스에서 호출 할 수있는 생성자 중 하나를 원합니다.
(I 자바 상태 머신에 대한 enum
패턴에 대해 알고 있지만, 서브 클래스 (불변 POJO를) 두 가지 수준의 내가 해결하고있어 문제에 대한 더 나은 작동합니다.) 내가 만들고 싶어
public abstract class SuperState {
public final long mValue;
protected SuperState(long value) { mValue = value; }
protected SuperState(SuperState last) { mValue = last.mValue + 1; }
...
}
public class FirstState extends SuperState {
public FirstState() { super(0); }
...
}
public class SecondState extends SuperState {
public SecondState(SuperState last) { super(last); }
...
}
public class ThirdState extends SuperState {
public ThirdState(SuperState last) { super(last); }
...
}
SuperState(long value)
생성자를 호출하기위한 서브 클래스 (FirstState
은 제외)에 대한 컴파일 타임 (또는 적어도 런타임) 오류.
SuperState
생성자에서 생성되는 구체 클래스의 유형을 알아낼 수 있고 예상대로 작동하지 않으면 런타임 예외가 발생합니까?
추상 클래스에 대해 "기본"구체적인 클래스가있어서 추가 액세스 형식이 있습니까? 내가 못생긴 찾을 수 있지만 내가 생각할 수있는
나는 이것이 가능하다고 생각하지 않는다 "정상적인"방법으로. 그러나'FirstState'를'SuperState'와 같은 패키지로 옮기고'protected SuperState (long)'* package-private *을 만들 수 있습니다. 그러나 이것이'SecondState'를 움직일 가능성을 막을 수는 없습니다. – Tom