lucianodacunha.net

domingo, 1 de janeiro de 2012

Uma palavrinha sobre herança em Java

Conforme demonstra o código abaixo, a classe X estende Y, ou seja, Y é uma classe,já que não é possível uma classe estender uma interface. Além disso X implementa N, uma interface. Com isso, desde já a classe X é considerada como instância de Ye instância de N.

Verificando a classe Y, percebemos que ela implementa Z, ou seja, Z é uma interface. Y também implementa M, outra interface.

Uma classe pode implementar diversas interfaces simultaneamente. Isso reflete em X, que com isso torna-se também um instância de Z e M.

A palavra-chave implements é utilizada quando deseja-se atribuir à classe um novo comportamento (método), sendo a partir de então obrigatório implementar os métodos declarados na interface, caso exista algum.

A palavra-chave extends é utilizada para estender (especializar) uma classe. Diferente de implements não forçará ninguém a implementar os métodos da classe estendida, também conhecida como super, somente no caso da superclasse ser abstract e ter implementado uma interface. Quando uma classe é abstract, ela não é obrigada a implementar suas interfaces declaradas, deixando a tarefa para ser realizada pela primeira classe concreta que a estender.


Olhando o código de Z veremos que Z estende alguém chamado W e K. Muito bem, Z é uma interface, pois além de estar declarada como tal, já foi utilizada com esse propósito. Assim, W também será, pois uma interface só pode estender outra interface. Da mesma forma K também é uma interface.

Vale lembrar que somente uma interface pode estender vários elementos ao mesmo tempo, sendo esse elementos interfaces. Uma classe não pode estender duas classes simultâneamente, mas como ocorre em X poderá estender no máximo uma classe e é livre para implementar diversas interfaces simultaneamente.

Por fim, no método principal de X, verificamos se o objeto referenciado por x é instância dos elementos declarados à direita do operador instanceof.

Esse operador, como seu próprio nome diz, verifica se a referência declarada à sua esquerda está apontando para um objeto do tipo declarado à sua direita.

Perceba que em todas as ocorrências receberemos true. Apesar de x se relacionar diretamente apenas com X, Y e N, é considerado instância de W, Z, K e M também em razão da hierarquia existente.

É isso, []'s

/**
 * Nome do arquivo: X.java
 */

class X extends Y implements N{

 public static void main(String[] args){

  X x = new X();

  System.out.println("x instanceof X: " + (x instanceof X));
  System.out.println("x instanceof Y: " + (x instanceof Y));
  System.out.println("x instanceof W: " + (x instanceof W));
  System.out.println("x instanceof Z: " + (x instanceof Z));
  System.out.println("x instanceof K: " + (x instanceof K));
  System.out.println("x instanceof M: " + (x instanceof M));
  System.out.println("x instanceof N: " + (x instanceof N));

 }
}

/**

/**
 * Nome do arquivo: Y.java
 */

class Y implements Z,M{}

/**
 * Nome do arquivo: Z.java
 */

interface Z extends W, K{}

/**
 * Nome do arquivo: K.java
 */

interface K{}

/**
 * Nome do arquivo: M.java
 */

interface M{}

/**
 * Nome do arquivo: N.java
 */

interface N{}

/**
 * Nome do arquivo: W.java
 */

interface W {}

Marcadores:

0 Comentários:

Postar um comentário

Assinar Postar comentários [Atom]



<$I18N$LinksToThisPost>:

Criar um link

<< Página inicial