Well you are doing var cube1 = new Cube1(); which is how you would make an object in C#, but since it is Unity, and this is a MonoBehaviour, you are not supposed to make it like that.
Instead, make a new GameObject and attach the Cube1 script to it.
void Start()
{
// make a new gameobject.
GameObject gameObject = new GameObject();
// attachadding a Cube1SpriteRenderer scriptas your `Cube1` will try to access it.
note: by doing Cube1// cube-- =please ..also see the bottom note of the answer. as--
Cube1; gameObject.AddComponent<SpriteRenderer>();
// cubeattach nowa holdsCube1 ascript to it and store the reference to theit scriptin youa addedvar.
Cube1 cube = gameObject.AddComponent<Cube1>() as Cube1;;
// call the function on that cube.
cube.Rectangle();
}
Sidenote, if you don't make an object in the scene that holds the ClockController, it won't execute the Start() method.
When you already have an existing GameObject (instead of making a new one) that has a script you want to access, you can use gameObject.GetComponent<Cube1>() , store it in a variable (if necessary) and access it that way. You just need to get that specific GameObject to begin with.
Extra info on component dependencies:
As pointed out by @DMGregory, cube.Rectangle() will try to find/access a SpriteRenderer on the cube object, which would have to be added first. You could add [RequireComponent(typeof(SpriteRenderer))] which means that whenever you add a Cube1 script to a GameObject, the required component is added aswell if it is not already there.
I'd suggest to take a look at the docs: https://docs.unity3d.com/ScriptReference/RequireComponent.html
Alternatives would probably be making sure in your Cube1 script that at some point a SpriteRenderer is attached, but that's all going off-topic I think.