Null Reference Exception: Object Reference, with base class?

For some reason, i don’t understand, i am getting a null reference exception when i try to inherit a method from a base class. It is with the jump function at line 53 for the Child class and line 25 for the parent class

public class Racers : MonoBehaviour {
	Rigidbody2D rb2D;
	protected float speed = 10f;
	protected float jumpSpeed = 800;
	protected float roundToOne(float lol){
		if (lol > 0) return 1;
		else return -1;
	}
	protected bool WallSitting(int layer){
		RaycastHit2D bump = Physics2D.Raycast(transform.position,Vector2.right * transform.localScale.x,0.55f,~((1<<9) | (1<<8)));

		if (bump.collider != null && bump.collider.gameObject.tag == "Untagged") return true;
		else return false;
	}
	protected bool jumped;
	void Start(){
		rb2D = GetComponent<Rigidbody2D> ();
	}
	protected void Jump(int Action){
		switch (Action) {
		case 1:
			rb2D.AddForce (Vector2.up * jumpSpeed);
			rb2D.velocity = new Vector2 (rb2D.velocity.x / 2, 0);
			jumped = true;
			break;
		case -1:
			if(rb2D.velocity.y > 0.5)
				rb2D.velocity = new Vector2 (rb2D.velocity.x, rb2D.velocity.y/3);
			break;
		case 0:
			rb2D.velocity = new Vector2 (11 * -transform.localScale.x, 13);
			transform.localScale = transform.localScale.x == 1 ? new Vector2 (-1, transform.localScale.y) : new Vector2 (1, transform.localScale.y);
			jumped = true;
			break;
		}
	}
	protected void Direction(float JustThat){
		float horiz = JustThat * speed;
		transform.Translate (horiz * Time.deltaTime, 0, 0);
		if (Mathf.Abs(JustThat) >= .9 && Utilities.Grounded (transform)) {
			transform.localScale = new Vector2 (roundToOne(JustThat), transform.localScale.y);
		}
	}
	protected void Animator(){
		GetComponent<Animator>().SetFloat("Speed",Mathf.Abs(1));
		GetComponent<Animator>().SetBool("HitSpace",jumped);
		GetComponent<Animator>().SetBool("grnded",Utilities.Grounded (transform));
		GetComponent<Animator>().SetFloat("AirSpeed",rb2D.velocity.y);
		GetComponent<Animator>().SetBool("OnWall",WallSitting(3));
		jumped = false;
	}
}

Child Class:

public class VirtualController : Racers {
	public bool Recording;
	public List<PressTime> Controller = new List<PressTime> ();
	float dir;
	int action;
	int arraycheker(int testnum){
		if (testnum < 0)
			return 0;
		else
			return testnum;
	}
	void Start(){
		if(!Recording)
		StartCoroutine (Playback());
	}
	void Update(){
		if (Recording)
			Record ();
		else
			transform.Translate (10f * Time.deltaTime * dir,0,0);
	}

	void Record(){
		if(Input.GetKeyDown("a") || Input.GetKeyUp("a"))
			Controller.Add(new PressTime("a",Time.time));
		if(Input.GetKeyDown("d") || Input.GetKeyUp("d"))
			Controller.Add(new PressTime("d",Time.time));
		if(Input.GetKeyDown(KeyCode.Space) || Input.GetKeyUp(KeyCode.Space))
			Controller.Add(new PressTime("space",Time.time));
	}
	IEnumerator Playback(){
		int counter = 0;
		int i = 0;
		bool a = false;
		bool d = false;
		bool space = false;
		while (counter < Controller.Count - 1) {
			if (Controller *.buttonPressed == "a") {*
  •  		dir = a ? 0 : -1;*
    
  •  		a = a ? false : true;*
    
  •  		Debug.Log ("a action");*
    

_ } else if (Controller .buttonPressed == “d”) {_
* dir = d ? 0 : 1;*
* d = d ? false : true;*
* Debug.Log (“d action”);*
_ } else if (Controller .buttonPressed == “space”) {
* space = space ? false : true;
action = action == 1 ? 0 : 1;
base.Jump (1);
}
yield return new WaitForSeconds (Controller .Time - (Controller[arraycheker(i-1)].Time));
i++;
}
}
[System.Serializable]
public struct PressTime{
public float Time;
public string buttonPressed;
public PressTime(string button, float tim){
buttonPressed = button;
Time = tim;
}
}
}*_

Nevermind i figured it out

I had to add

void Start(){
     base.Start();
}

To Virtual controller.