Olá pessoal, será que alguém pode me explicar o por que do resultado dessa questão:??
[code]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();
}
}[/code]
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…
pq os métodos foram sobre escritos, não?
rmarin
#3
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.
Isso ocorre porque o metodo printS2 da Classe R é protected ou seja a classe S não herda esse metodo!
rmarin
#5
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.
po foi mal mesmo! agora lendo sua resposta e prestando mais atenção entendi! Viajei desculpe e valew!!!
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
#9
[quote=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.[/quote]
Será que vc poderia explicar isso melhor? Aquela idéia de que vc não pode deixar um método herdado mais “ACESSÍVEL”.
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+