El tipo de la variable simplemente te dice de que tipo debe de ser la variable que le pases, en este caso la definición de stack(pila en ingles) es recursiva, esto es:
Un stack es:
- El stack vacio
- Un elemento a segudo de una pila S.
Donde el stack vacio es Null, y un stack es int dato seguido de un stack llamado sig.
Ahora un stack es una estructura LIFO Last In First Out, esto es, todo los elementos que insertes los pones enfrente, por lo tienes que crea una nueva pila donde:
int d es el primer elemento y la pila actual osea this, debe se ser la pila sigueinte.
q.sig debe de ser de tipo pila, por lo que al pasarle this, le estas pasando el objeto desde donde se llama la función.
Por ultimo la función sacar lo único que hace es regresar como queda la pila quitando el ultimo elemento. A lo mejor lo que tu buscas es esto:
public int sacar() {
this = this.sig;
return dato;
}