Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Encapsulamento

Srs, boa tarde!

No código abaixo estou com dúvida no entendimento de encapsulamento nas linhas 10 e 7. Sabendo que tellIt é uma referência ao objeto Tell() que por sua vez herda a classe Speak e implementa a interface Truth. Quando executamos "((Truth)tellIt)" o resultado dessa expressão é Truth ou tellIt? Faço o mesmo questionamento para a linha 7. Obrigado.

package codigo;

interface Truth { 
   public void tellItLikeItIs();
}

class Speak{}

class Tell extends Speak implements Truth {
   public void tellItLikeItIs() {
      System.out.println("Right on!");
   }
}

public class A{   
   public static void main(String[] args){ 

   Speak speakIT = new Tell(); /* Line 3 */
   Tell tellIt = new Tell(); /* Line 4 */

   tellIt.tellItLikeItIs();/* Line 8 */
   ((Truth)tellIt).tellItLikeItIs(); /* Line 10 */
   ((Truth)speakIt).tellItLikeItIs(); /* Line 7 */

   }  

}
2 respostas
solução!

Leandro,

primeiro irei explicar o exercicio e depois sua dúvida , ok

o código de cima irá dar erro , ele não irá compilar .

pois possui o seguinte erro na declaração da variável . Repare que a speakIT foi declarada :

Speak speakIT = new Tell();

com T maiusculo . mas na linha abaixo repare que ela está com t minusculo :

 ((Truth)speakIt).tellItLikeItIs();

isso gerará um erro de compilação , pois não irá encontrar a variável speakIt

essa questão tipica de certificação , você concentrada na resolução e com monte de informação . e deixa de prestar atenção nos pequenos erros .

sobre sua dúvida .

por mais que tenha a variável está sendo tranformada em Truth , mais generico , mas está buscando o método tellItLikeItIs() da classe Tell , pois além de ela implementar o método , ela também implementa a classe Truts .

isso é o polimorfismo.

Celso, obrigado pelo retorno.