Parent function not using overwritten array from child

You’re not overriding but overshadowing the parent’s class field named array inside each of its child classes!

Overriding is for non-static methods only. Other types of class members become overshadowed instead.

So when subclassing take extra care not to accidentally re-declare inherited fields and static methods.

If you need so instead assign a value w/o re-declaring them.

// https://Discourse.Processing.org/t/
// parent-function-not-using-overwritten-array-from-child/22796/3

// GoToLoop (2020/Jul/23)

final Parent[] children = { new Child1(), new Child2(), new Child3() };

void setup() {
  printArray(children);
  println();
  for (final Parent child : children)  println(child.isArrayTrue(4));
  exit();
}

abstract class Parent {
  boolean[] array;

  boolean isArrayTrue(final int index) {
    return array[index];
  }

  @Override String toString() {
    return java.util.Arrays.toString(array);
  }
}

class Child1 extends Parent {
  {
    array = new boolean[] { true, true, true, true, true, true, true };
  }
}

class Child2 extends Parent {
  {
    array = new boolean[] { false, true, false, true, false, true, false };
  }
}

class Child3 extends Parent {
  {
    array = new boolean[] { false, true, true, false, true, true, false };
  }
}
4 Likes