OO acabo de ver cual es el problema, al parecer tiene algo que ver con definir el tipo de objetos que guardara el ArrayList, y como le dije que guardara pelotas, pelotas necesita introducir en contains.
Por lo tanto los códigos quedarían de la siguiente manera.
public class Pelota {
	protected String nombre;
	protected int precio;
	
	public Pelota(String n, int p) {
		nombre = n;
		precio = p;
	}
	
	public String getNombre() {
		return nombre;
	}
	
	public boolean equals(Object obj) {
		return nombre.equalsIgnoreCase(((Pelota)obj).nombre);
	}
	
}
Clase prueba
import java.util.ArrayList;
public class Test {
	public static void main(String[] args) {
		ArrayList<Pelota> pelotas = new ArrayList<Pelota>();
		pelotas.add(new Pelota("beis",15));
		pelotas.add(new Pelota("fut",10));
		pelotas.add(new Pelota("basquet",915));
		pelotas.add(new Pelota("volei",159));
		
		System.out.println(pelotas.contains(new Pelota("beis",15)));
	}
}Resultando true.
No fue necesario sobrescribir el método hasCode(), pero de igual modo la manera correcta en la cual deberían quedar la clase Pelota, seria la siguiente.
public class Pelota {
	protected String nombre;
	protected int precio;
	
	public Pelota(String n, int p) {
		nombre = n;
		precio = p;
	}
	
	public String getNombre() {
		return nombre;
	}
	
	
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((nombre == null) ? 0 : nombre.hashCode());
		return result;
	}
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Pelota other = (Pelota) obj;
		if (nombre == null) {
			if (other.nombre != null)
				return false;
		} else if (!nombre.equals(other.nombre))
			return false;
		return true;
	}
}
Ello porque hasCode podría ser invocado al usar métodos de la clase Collections. En fin
Gracias por la ayuda.