Duvida com Overriding

Pessoal do GUJ, eu achava que entendia de overriding perfeitamente ateh eu me deparar com esse cogido:


class MyParent
{
	int x, y;
	MyParent(int x, int y)
	{
		this.x = x;
		this.y = y;
	}
	public int addMe(int x, int y) //ESTE METODO DA SUPER CLASSE AQUI...
	{
		return this.x + x + y + this.y;
	}
	public int addMe(MyParent myPar)
	{
		return addMe(myPar.x, myPar.y);
	}
}

class MyChild extends MyParent
{
	int z;
	MyChild(int x, int y, int z)
	{
		super(x,y);
		this.z = z;
	}
	public int addMe(int x, int y, int z)
	{
		return this.x + x + this.y + y + this.z + z;
	}
	public int addMe(MyChild myChi)
	{
		return addMe(myChi.x, myChi.y, myChi.z);
	}
	public int addMe(int x, int y) //ESTA IDENTICO A ESTE! =/ Porque roda?
	{
		return this.x + x + y + this.y;
	}
}

public class MySomeOne
{
	public static void main(String[] args)
	{
		MyChild myChi = new MyChild(10,20,30);
		MyParent myPar = new MyParent(10, 20);
		int x = myChi.addMe(10, 20, 30);
		int y = myChi.addMe(myChi);
		int z = myPar.addMe(myPar);
		System.out.println(x + y + z);
	}
}

Aguem consegue me dizer porque roda? eu estava crente que iria dar um erro de compilacao… pois os metodos estao identicos! ja que a subclasse herda da super.

Olá,

Na verdade você está exemplificando overriding, fornecendo na classe filha um método com a mesma assinatura da superclasse.

Em:

int y = myChi.addMe(myChi);

está sendo executado o método mais especializado, ou seja, o da classe filha.

Abs,

o overriding faz exatamente isso, vc esta sobrescrevendo um método ( mesma assinatura ). É uma especializacao do metodo na classe filha nada mais… nao estarias confundindo com overloading ??