Do I make all children a public GameObject within the parent to access them

I have a parent that is managing all the children within it. All it does is just change the sprite of each child to certain ones.

Is there a better was to access the children than making them a reference of a public GameObject within the parent. I want to have more control over them, like calling functions without using SendMessage, getting values and changing positions.

Make them into an array of GameObjects in the parent object?

So the parent can have something like:

public GameObject childrenList;  // Perhaps even static? 

void Start(){
    // For each children or specific children, add them to the array childrenList. 
}

Easier to manage and control now.