Relações IS-A e HAS-A


IS-A

Em OO o conceito de IS-A é baseado na herança de classe e implementação de interface. É uma forma de dizer que uma classe A é do tipo de uma classe B.
A relação IS-A é expressa através das palavras-chave extends (herança) e implements (interface). Se a expressão A instanceof B retorna true, então A IS-A B, mesmo se uma classe não herde diretamente da outra, ou seja, mesmo se existam outras classes na herança.

interface Celular {

}

public class Nokia implements Celular {

}

public class N95 extends Nokia {
     
      public static void main(String[] args) {
            N95 n95 = new N95();
            Nokia nokia = new Nokia();
            if (n95 instanceof Nokia)
                  System.out.println("N95 IS-A " +
                                        "Nokia");
            if (n95 instanceof Celular)
                  System.out.println("N95 IS-A " +
                                         "Celular");
            if (nokia instanceof Celular)
                  System.out.println("Nokia IS-A " +
                                        "Celular");
      }
     
}

HAS-A

Uma relação HAS-A é baseada no uso, ao invés de herança. Em outras palavras, a classe A HAS-A B se um código na classe A faz referência a uma instância da classe B.

class Cachorro {
     
}

public class App {

      //App HAS-A Cachorro
      Cachorro cachorro = new Cachorro();
     
}


Fonte: SCJP Sun Certifi ed Programmer for Java 6 Study Guide

0 comentários:

Postar um comentário