Java中抽象类的问题

时间:2013-04-07 16:29:17

标签: java abstract-class

我正在为一堂课写一个程序。当我运行程序时,字母表的值永远不会粘住,当我在子类中使用toString()时,字母表始终为null。我知道在第二个构造函数中this.alphabet等于我想要的相等但在此之后它失去了它的价值。奇怪的部分是machineName保持它的价值。我还是java和stackoverflow的新手,所以如果我做了一些蠢货,我很抱歉。另外,我无法改变我只能实现它的方法或变量。

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;
}
}

2 个答案:

答案 0 :(得分:0)

this.alphabet = alphabet;
setAlphabet(this.alphabet);

如果您要在this.alphabet中覆盖该字段,首次分配到setAlphabet的目的是什么?就是这样:

public AbstractDFA(String nameofmachine, String alphabet)
{
  this.machineName = nameofmachine;
  setAlphabet(alphabet);
}

会更清楚。

如果您在第一行之后检查this.alphabet的值,但在致电setAlphabet之前,则可能setAlphabet根本无法正常工作。

答案 1 :(得分:0)

你的抽象类有两个构造函数,第一个不调用setAlphabet()方法。

相关问题