Вы получаете StackOverflow, поскольку родительский конструктор всегда вызывается (см также: https://stackoverflow.com/a/527069/664108). В вашем случае это приводит к бесконечной рекурсии.
Чтобы избежать этого, вам придется добавить проверку в Node
конструктора и вызовите его явно из NullNode
конструктора:
public class Node
{
Node nextNode;
char key;
Node prevNode;
Node() {
Node(true);
}
Node(boolean createNullNodes) {
if (createNullNodes) {
nextNode = new NullNode();
prevNode = new NullNode();
}
}
}
public class NullNode extends Node
{
NullNode() {
super(false);
}
}
Лучшее решение для шаблона NullObject использует интерфейсы. Это устраняет проблему конструктора, а также позволяет удалить ненужные переменные nextNode
и prevNode
из NullNode
.
Пример с интерфейсом:
public interface INode
{
public char getKey();
public INode getNext();
public INode getPrev();
// ...
}
public class Node implements INode
{
Node nextNode;
char key;
Node prevNode;
Node() {
nextNode = new NullNode();
prevNode = new NullNode();
}
public char getKey() {
return key;
}
public INode getNext() {
return nextNode;
}
public INode getPrev() {
return prevNode;
}
}
public class NullNode implements INode
{
public char getKey() {
return null;
}
public INode getNext() {
return this;
}
public INode getPrev() {
return this;
}
}
Есть вы слышали о «супер'-ключевом? Вы можете вызвать супер-конструктор 'super()'. – jlordo
То, что вы делаете, не выглядит неправильным для меня, вам просто нужно переопределить конструктор в 'NullNode', чтобы избежать бесконечной рекурсии. –
Прямо сейчас я получаю StackOverflowError Exception – Sush