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

7 respostas
anderson.bonavides
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();
         }
}

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.

7 Respostas

Marcio_Nogueira

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].

fabim

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.

anderson.bonavides

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?

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.

anderson.bonavides

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.

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

fabim

anderson.bonavides:
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.

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?

pode.

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

anderson.bonavides

fabiocsi:
anderson.bonavides:
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.

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?

pode.

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

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

=]

Criado 20 de novembro de 2007
Ultima resposta 20 de nov. de 2007
Respostas 7
Participantes 4