Linguagem de Programação II 
Ciência da Computação 
1 
Antes de ler este documento assista às vídeos aulas 1, 2 e 3 da Prof.ª M.ª Eng.ª Elaine Cecília Gatto 
que estão disponíveis no Syllabus e Youtube. Todos os códigos fonte dos exemplos também estão 
disponíveis no Syllabus. 
REFERÊNCIAS DA SUPERCLASSE E OBJETOS DA SUBCLASSE 
 Java é uma linguagem fortemente tipada; 
 A compatibilidade de tipos é imposta rigorosamente; 
 Uma variável de referencia de um tipo de classe não pode referenciar um objeto de outro tipo de 
classe; 
o EXEMPLO: ExemploHerança4; 
 Ainda que a classe X e a classe Y sejam fisicamente iguais, não é possível atribuir a uma variável 
X a referencia a um objeto Y, pois tem tipos diferentes; 
 Uma variável de referencia de objeto só pode referenciar objetos de seu tipo; 
 Há uma exceção importante à imposição rigorosa de tipos de Java; 
 A variável de referencia de uma superclasse pode receber a referencia a um objeto de qualquer 
subclasse derivada dessa superclasse; 
 Uma referencia da superclasse pode referenciar um objeto da classe; 
o EXEMPLO: ExemploHerança 5; 
 Y é derivada de X, então, é permitido que x2 receba uma referencia a um objeto Y; 
 É o tipo da variável de referencia que determina os membros que podem ser acessados – e não o 
tipo do objeto que ela referencia; 
 Quando uma referência a um objeto da subclasse for atribuida a uma variavel de referencia da 
superclasse, você só terá acesso às partes do objeto definidas pela superclasse; 
 X2 não pode acessar b mesmo quando referencia um objeto y por conta disso; 
 A superclasse não tem conhecimento do que uma subclasse adiciona a ela; 
 Um local importante em que referencias de subclasse são atribuidas a variaveis da superclasse é 
quando os contrutores são chamados em uma hierarquia de classes;
Linguagem de Programação II 
Ciência da Computação 
2 
 É comum uma classe definir um construtor que recebe um objeto da classe como parâmetro; 
 Isso permite que a classe construa uma cópia de um objeto; 
 As subclasses de uma classe como essa podem se beneficiar desse recurso; 
o EXEMPLO: ExemploHerança6; 
 O ponto-chave é que a classe mãe está esperando um objeto da classe mãe; 
 No entanto, uma classe filha passa para a classe mãe um objeto classe filha; 
 Isso funciona porque uma referencia da superclasse pode referenciar um objeto da subclasse; 
 É perfeitamente aceitável passar para a classe mãe a referencia a um objeto de uma classe 
derivada da classe mãe; 
 Já que o construtor da classe mãe só está inicializando as partes do objeto da subclasse que são 
membros da classe mãe, não importa se o objeto contém outros membros adicionados por classes 
derivadas. 
SOBREPOSIÇÃO DE MÉTODOS 
 Em uma hierarquia de classes, quando um método de uma subclasse tem o mesmo tipo de retorno 
e assinatura de um método de superclasse, diz-se que o método da subclasse SOBREPÕE o 
método da superclasse; 
 Quando um método sobreposto é chamado de dentro de uma subclasse, a referencia é sempre à 
versão definida pela subclasse; 
 A versão do método definida pela superclasse será ocultada; 
o EXEMPLO: ExemploHerança7; 
 Quando o método MOSTRAR() é chamado em um objeto de tipo B, a versão definida dentro de B 
é usada; 
 A versão MOSTRAR () de B sobrepõe a versão declarada de A; 
 Se quiser acessar a versão de um método sobreposto definida pela superclasse, você pode fazer 
isso usando SUPER;
Linguagem de Programação II 
Ciência da Computação 
3 
o EXEMPLO: ExemploHerança8; 
 Nessa versão de B, a versão de MOSTRAR() da superclasse é chamada dentro da versão da 
subclasse; 
 Isso permite que todas as variáveis de instância sejam exibidas; 
 Super. MOSTRAR() chama a versão de MOSTRAR() da superclasse; 
 A sobreposição de métodos só ocorre quando as assinaturas dos dois métodos são idênticas; 
 Se não forem, os dois métodos serão apenas sobrecarregados; 
o EXEMPLO: ExemploHerança9; 
 A versão MOSTRAR() definida por B recebe um parametro tipo string; 
 Isso torna sua assinatura diferente da existente em A, que não recebe parâmetros 
 Então, não ocorre sobreposição ou OCULTAÇÃO de nomes. 
MÉTODOS SOBREPOSTOS DÃO SUPORTE AO POLIMORFISMO 
 A sobreposição de métodos forma a base de um dos conceitos mais poderosos em JAVA: o 
despacho dinâmico de métodos; 
 Despacho dinâmico de métodos é o mecanismo pelo qual a chamada a um método sobreposto é 
reslvida no tempo de execução e não no tempo de compilação; 
 O despach dinâmico de memória é importante porque é assim que JAVA implementa o 
polimorfismo no tempo de execução; 
 Uma variável de referência da superclasse pode referenciar um objeto da subclasse; 
 Java usa esse fato para resolver chamadas a métodos sobrepostos no tempo de execução; 
 Quando um método sobreposto é chamado por uma referencia da superclasse, JAVA determina a 
versão desse método que será executada com base no tipo do objeto sendo referenciado no 
momento em que a chamada ocorre; 
 Essa escolha é feita no tempo de execução; 
 Quando diferentes tipos de objetos são referenciados, versões distintas de um método sobreposto 
são chamadas;
Linguagem de Programação II 
Ciência da Computação 
4 
 É o tipo do objeto referenciados que determina a versão de um método sobreposto que será 
executada, e não o tipo da variável de referencia; 
 Se uma superclasse tiver um método sobreposto por uma subclasse, quando diferentes tipos de 
objetos da subclasse forem referenciados por uma variável de referencia da superclasse, versões 
distintas do método serão executadas; 
o EXEMPLO: ExemploHerança10; 
 No exemplo acima são criadas dus subclasses e uma superclasse. A superclasse declara um 
método chamado QUEM() e as subclasses o sobrepõem; 
 No main são declarados objetos e uma referencia; 
 O programa atribui uma referencia de cada tipo de objeto a supRef e usa essa referencia para 
chamar QUEM(); 
 A versão de QUEM() executada é determinada pelo tipo de objeto referenciado no momento da 
chamada, e não pelo tipo de classe. 
PORQUE SOBREPOR MÉTODOS? 
 Os métodos sobrepostos permite que JAVA dê suporte ao POLIMORFISMO no tempo de 
execução; 
 O POLIMORFISMO é essencial para a programação orientada a objetos; 
 O POLIMORFISMO permite que uma classe geral especifique métodos que serão comuns a todos 
os seus derivados; 
 O POLIMORFISMO permite também que as subclasses definam a implementação específica de 
alguns desses métodos ou de todos eles; 
 Os métodos sobrepostos são outra maneira de JAVA implementar o aspecto “UMA INTERFACE, 
VÁRIOS MÉTODOS”, do polimorfismo; 
 As superclasses e subclasses formam uma hierarquia que se move da menor para a maior 
especialização; 
 A superclasse fornece todos os elementos que uma subclasse pode usar diretamente; 
 A superclasse especifica os métodos que a classe derivada deve implementar por conta própria;
Linguagem de Programação II 
Ciência da Computação 
5 
 À subclasse é dada a flexibilidade para definir seus próprios métodos, sem deixar de impor a 
consistência da INTERFACE; 
 Uma superclasse pode definir a forma geral dos métodos que serão usados por todas as suas 
subclasses; 
o EXEMPLO: ExemploHerança11;

Herança

  • 1.
    Linguagem de ProgramaçãoII Ciência da Computação 1 Antes de ler este documento assista às vídeos aulas 1, 2 e 3 da Prof.ª M.ª Eng.ª Elaine Cecília Gatto que estão disponíveis no Syllabus e Youtube. Todos os códigos fonte dos exemplos também estão disponíveis no Syllabus. REFERÊNCIAS DA SUPERCLASSE E OBJETOS DA SUBCLASSE  Java é uma linguagem fortemente tipada;  A compatibilidade de tipos é imposta rigorosamente;  Uma variável de referencia de um tipo de classe não pode referenciar um objeto de outro tipo de classe; o EXEMPLO: ExemploHerança4;  Ainda que a classe X e a classe Y sejam fisicamente iguais, não é possível atribuir a uma variável X a referencia a um objeto Y, pois tem tipos diferentes;  Uma variável de referencia de objeto só pode referenciar objetos de seu tipo;  Há uma exceção importante à imposição rigorosa de tipos de Java;  A variável de referencia de uma superclasse pode receber a referencia a um objeto de qualquer subclasse derivada dessa superclasse;  Uma referencia da superclasse pode referenciar um objeto da classe; o EXEMPLO: ExemploHerança 5;  Y é derivada de X, então, é permitido que x2 receba uma referencia a um objeto Y;  É o tipo da variável de referencia que determina os membros que podem ser acessados – e não o tipo do objeto que ela referencia;  Quando uma referência a um objeto da subclasse for atribuida a uma variavel de referencia da superclasse, você só terá acesso às partes do objeto definidas pela superclasse;  X2 não pode acessar b mesmo quando referencia um objeto y por conta disso;  A superclasse não tem conhecimento do que uma subclasse adiciona a ela;  Um local importante em que referencias de subclasse são atribuidas a variaveis da superclasse é quando os contrutores são chamados em uma hierarquia de classes;
  • 2.
    Linguagem de ProgramaçãoII Ciência da Computação 2  É comum uma classe definir um construtor que recebe um objeto da classe como parâmetro;  Isso permite que a classe construa uma cópia de um objeto;  As subclasses de uma classe como essa podem se beneficiar desse recurso; o EXEMPLO: ExemploHerança6;  O ponto-chave é que a classe mãe está esperando um objeto da classe mãe;  No entanto, uma classe filha passa para a classe mãe um objeto classe filha;  Isso funciona porque uma referencia da superclasse pode referenciar um objeto da subclasse;  É perfeitamente aceitável passar para a classe mãe a referencia a um objeto de uma classe derivada da classe mãe;  Já que o construtor da classe mãe só está inicializando as partes do objeto da subclasse que são membros da classe mãe, não importa se o objeto contém outros membros adicionados por classes derivadas. SOBREPOSIÇÃO DE MÉTODOS  Em uma hierarquia de classes, quando um método de uma subclasse tem o mesmo tipo de retorno e assinatura de um método de superclasse, diz-se que o método da subclasse SOBREPÕE o método da superclasse;  Quando um método sobreposto é chamado de dentro de uma subclasse, a referencia é sempre à versão definida pela subclasse;  A versão do método definida pela superclasse será ocultada; o EXEMPLO: ExemploHerança7;  Quando o método MOSTRAR() é chamado em um objeto de tipo B, a versão definida dentro de B é usada;  A versão MOSTRAR () de B sobrepõe a versão declarada de A;  Se quiser acessar a versão de um método sobreposto definida pela superclasse, você pode fazer isso usando SUPER;
  • 3.
    Linguagem de ProgramaçãoII Ciência da Computação 3 o EXEMPLO: ExemploHerança8;  Nessa versão de B, a versão de MOSTRAR() da superclasse é chamada dentro da versão da subclasse;  Isso permite que todas as variáveis de instância sejam exibidas;  Super. MOSTRAR() chama a versão de MOSTRAR() da superclasse;  A sobreposição de métodos só ocorre quando as assinaturas dos dois métodos são idênticas;  Se não forem, os dois métodos serão apenas sobrecarregados; o EXEMPLO: ExemploHerança9;  A versão MOSTRAR() definida por B recebe um parametro tipo string;  Isso torna sua assinatura diferente da existente em A, que não recebe parâmetros  Então, não ocorre sobreposição ou OCULTAÇÃO de nomes. MÉTODOS SOBREPOSTOS DÃO SUPORTE AO POLIMORFISMO  A sobreposição de métodos forma a base de um dos conceitos mais poderosos em JAVA: o despacho dinâmico de métodos;  Despacho dinâmico de métodos é o mecanismo pelo qual a chamada a um método sobreposto é reslvida no tempo de execução e não no tempo de compilação;  O despach dinâmico de memória é importante porque é assim que JAVA implementa o polimorfismo no tempo de execução;  Uma variável de referência da superclasse pode referenciar um objeto da subclasse;  Java usa esse fato para resolver chamadas a métodos sobrepostos no tempo de execução;  Quando um método sobreposto é chamado por uma referencia da superclasse, JAVA determina a versão desse método que será executada com base no tipo do objeto sendo referenciado no momento em que a chamada ocorre;  Essa escolha é feita no tempo de execução;  Quando diferentes tipos de objetos são referenciados, versões distintas de um método sobreposto são chamadas;
  • 4.
    Linguagem de ProgramaçãoII Ciência da Computação 4  É o tipo do objeto referenciados que determina a versão de um método sobreposto que será executada, e não o tipo da variável de referencia;  Se uma superclasse tiver um método sobreposto por uma subclasse, quando diferentes tipos de objetos da subclasse forem referenciados por uma variável de referencia da superclasse, versões distintas do método serão executadas; o EXEMPLO: ExemploHerança10;  No exemplo acima são criadas dus subclasses e uma superclasse. A superclasse declara um método chamado QUEM() e as subclasses o sobrepõem;  No main são declarados objetos e uma referencia;  O programa atribui uma referencia de cada tipo de objeto a supRef e usa essa referencia para chamar QUEM();  A versão de QUEM() executada é determinada pelo tipo de objeto referenciado no momento da chamada, e não pelo tipo de classe. PORQUE SOBREPOR MÉTODOS?  Os métodos sobrepostos permite que JAVA dê suporte ao POLIMORFISMO no tempo de execução;  O POLIMORFISMO é essencial para a programação orientada a objetos;  O POLIMORFISMO permite que uma classe geral especifique métodos que serão comuns a todos os seus derivados;  O POLIMORFISMO permite também que as subclasses definam a implementação específica de alguns desses métodos ou de todos eles;  Os métodos sobrepostos são outra maneira de JAVA implementar o aspecto “UMA INTERFACE, VÁRIOS MÉTODOS”, do polimorfismo;  As superclasses e subclasses formam uma hierarquia que se move da menor para a maior especialização;  A superclasse fornece todos os elementos que uma subclasse pode usar diretamente;  A superclasse especifica os métodos que a classe derivada deve implementar por conta própria;
  • 5.
    Linguagem de ProgramaçãoII Ciência da Computação 5  À subclasse é dada a flexibilidade para definir seus próprios métodos, sem deixar de impor a consistência da INTERFACE;  Uma superclasse pode definir a forma geral dos métodos que serão usados por todas as suas subclasses; o EXEMPLO: ExemploHerança11;