Implementar ou Extender?

Eu sei que :

Extender = herança

Implement = ???

Pesquisei, mas nao entendi!

Alguem pode me dar uma luz?

exemplo: Você tem uma oficina de carros que mexe com mecânica

  1. se extender (para lataria), vc vai ganhar uma nova funcionalidade.

  2. agora, se vc implementar essa oficia com uma oficina de motos e uma oficina de barcos, então você vai poder lidar com todos os tipos com uma única oficina… (Ou no caso uma única interface).

1 curtida

[quote]2) agora, se vc implementar essa oficia com uma oficina de motos e uma oficina de barcos, então você vai poder lidar com todos os tipos com uma única oficina… (Ou no caso uma única interface).
[/quote]

Isso nao é quase a mesma coisa que herdar? Tipo, quando voce herda, voce pode fazer as duas coisas!

implements = Interface

Leia isso http://www.guj.com.br/articles/123 e qualquer duvida posta ai.

Baixe as apostilas da Caelum e K19.

Abraço e boa sorte!

Vou tentar explicar:

Imagina que você tem um sistema onde tem a classe secretária, diretor e funcionario.

Secretária e Diretor herdam os atributos de funcionário = herança.

Agora imaginamos algumas telas onde somente o diretor pode ter aceso, cria-se uma interface de login para que o diretor possa acessar determinadas telas, enquanto essa interface não é implementada quando o usuário do sistema for a secretária.

No mais, interface é um conjunto de métodos relacionados e não tem corpo, ao contrário de classe.

Não sei se ficou claro, dá uma pesquisada, leia exemplos.
Abraço!
:slight_smile:

Quando você implementa uma interface é como se assinasse um contrato,
você é obrigago a implementar os métodos que estão descritos nela.
Desde que a classe que implente seja uma classe concreta
(veja mais regras com relação a isso).

Abs

[quote=Andre Lopes][quote]2) agora, se vc implementar essa oficia com uma oficina de motos e uma oficina de barcos, então você vai poder lidar com todos os tipos com uma única oficina… (Ou no caso uma única interface).
[/quote]

Isso nao é quase a mesma coisa que herdar? Tipo, quando voce herda, voce pode fazer as duas coisas![/quote]

Não. Deixe-me colocar dois pontos:

  1. Não existe herança múltipla em Java, ao passo que não seria possível herdar duas classes ao mesmo tempo.
  2. Mesmo SE existisse herança múltipla, vc teria dificuldade no código, pois elee ficaria muito acoplado com as suas classes. Por exemplo:
public class OficinaCarro{
public void consertaCarro(){
System.out.println("Consertando carro");
}
}

public class OficinaMoto{
public void consertaMoto(){
System.out.println("Consertando moto");
}
}

// 1 - Não é possível herdar mais de uma classe (esse exemplo é meramente ilustrativo para mostrar quão acoplada sua classe iria ficar)
// 2 - A cada nova máquina (barco, avião, etc) Teria que se criar uma classe e adicionar ela na extensão e também alterar o código dessa classe adicionando um if
public class OficinaFinal extends OficinaCarro, OficinaMoto{
public void conserta(String tipo){
If(tipo.equals("carro"){
this.consertaCarro();
}
if(tipo.equals("moto"){
this.consertaMoto();
}
}
}

Ao contrário, com interfaces você tem um código de domínio bem menos desacoplado do que teria com herança múltipla. Quando se programa com interfaces, dificilmente vc irá se preocupar com a classe de domínio novamente… veja o exemplo:

[code]
public interface Oficina{
public void conserta();
}

public class OficinaCarro implements Oficina{
public void conserta(){
System.out.println(“Consertando carro”);
}
}

public class OficinaMoto implements Oficina{
public void conserta(){
System.out.println(“Consertando moto”);
}
}

public class OficinaFactory{
public static final int CARRO = 1;
public static final int MOTO = 2;
public Oficina getOficina(int tipo){
if(tipo == this.CARRO){
return new OficinaCarro();
}
if(tipo == this.MOTO){
return new OficinaMoto();
}
}
}

// desse modo sua OficinaFinal vai apenas lidar com a interface, e os métodos a serem chamados são escolhidos durante a execução
// dependendo da classe que foi instanciada pelo factory…
public class OficinaFinal{
public void conserta(int tipo){
Oficina oficina = new OficinaFactory().getOficina(tipo);
oficina.conserta();
}
}[/code]

Acho que ficou bem claro o exemplo (se vc souber o que é polimorfismo…)

Abraço

[b]O esquema de implementar interfaces ajuda a manter o controle de sua aplicação, determinando quais métodos são necessários para determinada classe.

A interface é como que uma classe onde apenas se declara métodos que serão utilizados nas classes que a implementar. Como que uma forma de não se esquecer quais métodos devem ser usados para aquela situação.

No conceito de Herança a classe recebe todos os métodos e atibutos da classe Pai.[/b]