static void Main()
    {
        // Simpler code to demonstrate the point
        ObjectParent parent = new ObjectChild();

        parent.Foo();     // Prints ObjectChild.Foo
    }
    /*
     * We'll assign the foundObject when
     * we find a ChildObject script on
     * a GameObject
     */

    // Update is called once per frame
    void Update()
    {
        if (foundObject == null)
        {
            Object[] objects = FindObjectsOfType(typeof(GameObject));
            // a list of all game objects in the scene

            foreach (GameObject o in objects)
            {
                Debug.Log(o);
                ObjectChild child = o.GetComponent(typeof(ObjectChild)) as ObjectChild;

                /*
                 * child is initialized as null
                 * if GetComponent returns an object
                 * then child is not null
                 */
                if (child != null)
                {
                    foundObject = o;

                    /*
                     * if child isn't null
                     * then we found an object
                     * with the ObjectChild attached
                     */
                }
            }
        }
    }