Я пишу программу для класса. Когда я запускаю программу, значение для алфавита никогда не придерживается, и когда я использую toString() в моем подклассе, алфавит всегда равен нулю. Я знаю, что во втором конструкторе this.alphabet равен тому, что я хочу, чтобы он был равен, но после этого он теряет свою ценность. Странная часть заключается в том, что machineName сохраняет ценность. Я все еще довольно новичок в java и stackoverflow, поэтому мне жаль, если я сделал что-то нелепое. Также я не могу изменить методы или переменные, которые я могу только реализовать.Проблемы с абстрактным классом в Java
public abstract class AbstractDFA{
private String machineName;
private String alphabet;
public AbstractDFA(String nameofmachine)
{
StringBuilder b = new StringBuilder();
for (int i = 0; nameofmachine.charAt(i) != '.'; i++)
{
b.append(nameofmachine.charAt(i));
}
machineName = b.toString();
}
public AbstractDFA(String nameofmachine, String alphabet)
{
this.alphabet = alphabet;
this.machineName = nameofmachine;
setAlphabet(this.alphabet);
}
public String toString()
{
return "Machine Name: " + machineName + "\nAlphabet: " + getAlphabet();;
}
public void setAlphabet(String alpha)
{
StringBuilder beta = new StringBuilder();
beta.append("{");
for (int i = 0; i < alpha.length(); i++)
{
beta.append(alpha.charAt(i));
if (i != (alpha.length() - 1))
{
beta.append(", ");
}
}
beta.append("}");
alphabet = beta.toString();
}
public String getAlphabet()
{
return alphabet;
}
}
общественного класса DFA расширяет AbstractDFA {
public DFA(String fileName){
super(fileName);
readDFA(fileName);
}
public DFA(String name, String alpha, int numStates, int start, int[][] delta, boolean[] finalstates){
super(name,alpha);
this.numberOfStates = numStates;
this.start = start;
this.delta = delta;
this.finalStates = finalstates;
}
}
Это абстрактный класс. Есть ли код в подклассе, который может повлиять на то, что вы видите? например один из ваших подклассов переопределяет 'setAlphabet'? –
Не так далеко, насколько я знаю. Я редактировал код для включения конструкторов из подкласса. Единственный раз, когда я обращаюсь к абстрактному классу, я использую super.getAlphabet(), и когда я использую super.toString() для печати имени и алфавита. –