Questão OO

9 respostas
diego2005

Olá pessoal, será que alguém pode me explicar o por que do resultado dessa questão:??

class R 
{
	private void printS1()
    {
    	System.out.print("R.printS1 ");
    }
    
  	protected void printS2() 
  	{
  		System.out.print("R.printS2 ");
  	}
  	
  	protected void printS1S2()
  	{
  		printS1();
  		printS2();
  	}
}

class S extends R 
{
	private void printS1()
	{
		System.out.print("S.printS1 ");
	}
  
  	protected void printS2()
  	{
  		System.out.print("S.printS2 ");
  	}
  	
  	public static void main(String[] args) 
  	{
    	new S().printS1S2();
	}
}

A saida é: Prints: R.printS1 S.printS2

A saida do segundo método tudo bem, só não entendi por que ele chama o método printS1 da classe R e não da classe S...

9 Respostas

Luiz-SP

pq os métodos foram sobre escritos, não?

rmarin

Isso ocorre porque o método printS1 é privado na classe R.

Logo, o método printS1 da classe S não é uma re-implementação do método printS1 da classe R, ele é apenas um método com o mesmo nome.

Maniezo

Isso ocorre porque o metodo printS2 da Classe R é protected ou seja a classe S não herda esse metodo!

rmarin

Cara, você falou completamente o contrário. Justamente por ser protected que a classe S herda este método. E a pergunta não foi sobre este método.

Maniezo

po foi mal mesmo! agora lendo sua resposta e prestando mais atenção entendi! Viajei desculpe e valew!!!

rmarin

Que isso, sem crise. :wink:

diego2005

Então, eu entedi que ele chama o método da super classe por que ele é privado, mas por que??? Será que alguém pode me explicar…

Valeu ai pela ajuda…

Luiz-SP

rmarin:
Isso ocorre porque o método printS1 é privado na classe R.

Logo, o método printS1 da classe S, ele é apenas um método com o mesmo nome.

Será que vc poderia explicar isso melhor? Aquela idéia de que vc não pode deixar um método herdado mais “ACESSÍVEL”.

diego2005

Por exemplo, se você tem um método protected na classe base:

protected void metodo() {}

Você só poderá declará-lo protected ou public na classe filha:

protected void metodo() {}

ou

public void metodo() {}

Métodos privados não são herdados…

Era isso que você queria saber?? Não sei se fui claro…qquer coisa posta novamente…

T+

Criado 14 de agosto de 2006
Ultima resposta 15 de ago. de 2006
Respostas 9
Participantes 4