public is not global variable?

public class ShowSelectedHero : Singleton<ShowSelectedHero>
{
    private Image[] HerosImage = new Image[4];
    private Hero[] heroes = new Hero[4];
    public Hero HeroInfo;
    public GameObject hero;

    void Start()
    {
        for (int i = 0; i < 4; i++)
        {
            HerosImage[i] = GameObject.Find("SelectedHero" + (i+1)).GetComponent<Image>();
        }
    }

    public void SelectedHero()
    {
        Image HeroImage = hero.GetComponent<Image>();
        for (int i = 0; i < heroes.Length; i++)
        {
            if (heroes[i] == null)
            {
                HerosImage[i].sprite = HeroImage.sprite;
                heroes[i] = HeroInfo;
                hero.GetComponent<Button>().interactable = false;
                break;
            }
            else if(i == 3)
            {
                Debug.Log("FULL!");
            }
        }

    }

I have six Heroes and I want to select four heroes.
But, in my opinion, each hero button use copy heroes array.
So when I debugging, I saw every heroes go to heroes[0].

How can I make heroes to global variable?

private static Hero[ ] heroes = new Hero[4];
But this should not be initialized in each instance but in a static constructor as a static field belongs to the type, not a certain instance.