Herança (Simples) - Explicação não muito clara

[code]class GameShape{
public void displayShape(){
System.out.println(“display shape”);
}
//mais algo
}
class PlayerPiece extends GameShape{
public void momePiece(){
System.out.println(“moving game piece”);
}
//mais algo
}
class TilePiece extends GameShape{
public void getAdjacent(){
System.out.println(“getting adjacent tiles”);
}
//mais algo
}

public class TestShapes{
public static void main(String[] args){
PlayerPiece player = new PlayerPiece();
TilePiece tile = new TilePiece();

     doShapes(player);
     doShapes(tile);


     public static void doShapes(GameShape shape){
              shape.displayShape();
     }

}
[/code]

Gera a saída:
displaying shape
displaying shape

A explicação do livro não é muito clara sobre o assunto alguêm poderia dar uma força?
Desde já agradeço.
Sem mais.

A herança é o recurso que possibilita que uma classe adquira as características de outra classe. A herança se caracteriza pela utilização da palavra-chave [color=darkred]extends[/color].

O exemplo mostra que objetos da classe herdeira podem ser passados para um metodo que espera objetos da classe GameShape, pois os filhos passam no teste É-UM ( PlayerPiece é um GameShape )

No entanto é um exemplo ruim pq nao mostra subscrição.

Vou ser mais claro na dúvida.

           
         doShapes(player);  
         doShapes(tile);  
  
         public static void doShapes(GameShape shape){  
                  shape.displayShape();  
         }  

Por que na chamada de doShapes(player) e doShapes(tile) eles não imprimem “moving game piece” e “getting adjacent tiles” ao invés disso imprime “display shape” 2 vezes?

Porque ele chama o método displayShape que existe apenas na classe pai, se esse método fosse subscrito nas subclasses então seria chamado os método displayShape da classe filha.

Entendeu?

Abraços.

[quote=Vecchiato]Porque ele chama o método displayShape que existe apenas na classe pai, se esse método fosse subscrito nas subclasses então seria chamado os método displayShape da classe filha.

Entendeu?

Abraços.[/quote]

No caso ela procura o método na sub-classe ai não encontra e chama o da super-classe. É isso?

[quote=anderson.bonavides][quote=Vecchiato]Porque ele chama o método displayShape que existe apenas na classe pai, se esse método fosse subscrito nas subclasses então seria chamado os método displayShape da classe filha.

Entendeu?

Abraços.[/quote]

Até compreendi mas me vem a seguinte questão: As sub-classes recebem o método herdado então pelo que entendi ela pode chamar o metodo herdado não?[/quote]

pode.

mas se ela nao ‘subscrever’ o metodo, sera executada a implementação que esta na classe Pai

[quote=fabiocsi][quote=anderson.bonavides][quote=Vecchiato]Porque ele chama o método displayShape que existe apenas na classe pai, se esse método fosse subscrito nas subclasses então seria chamado os método displayShape da classe filha.

Entendeu?

Abraços.[/quote]

Até compreendi mas me vem a seguinte questão: As sub-classes recebem o método herdado então pelo que entendi ela pode chamar o metodo herdado não?[/quote]

pode.

mas se ela nao ‘subscrever’ o metodo, sera executada a implementação que esta na classe Pai[/quote]

Perfeito!
Agora compreendi perfeitamente. Muito obrigado por ter exclarecido e a todos que postaram.

=]