Extends & Implements ?!?!?

Oi…
sei que é uma duvida muito basica… ams o livro nao explica direito…

quando exatamente devo usar EXTENDS e IMPLEMENTS em uma classe que criei??

:?: :?: :?: :?: :?: :?: :?: :?: :?:

Decore isto aqui:

class ClasseFilha extends ClassePai implements Interface1, Interface2, Interface3

ok… so nao ficou mt claro o implements…

:frowning:

Um exemplo em que você utiliza implements e interfaces são, por exemplo, naquelas classes que lidam com conexão SQL.

Na interface você define um contrato dizendo que qualquer classe que a implementar vai ter que escrever os métodos definidos.

Utilizando o exemplo de SQL, você tem vários tipos de bancos de dados: SQL Server, MySQL, Oracle, etc. Cada fabricante teve que implementar os seus pacotes para fazer a conexão, mas todos tem os mesmos métodos: connect, close, etc.
Já pensou se cada fabricante fizesse um método para conectar de nome diferente? Ia ser uma zona, não é mesmo? Por isso usaram interfaces.

ta… entao eu uso implements pra implementar na minha classe um conjunto de metodos ja pre-definidos?

entao… nao seria a mesma coisa do extends???

:?: :?: :?: :?: :?: :?:

Uma interface parece uma classe, porém não tem código, isto é, só tem nomes de métodos e modificadores, basicamente.

Vc vai implementar uma classe quando precisar de algum recurso referente a esta classe.

Por exemplo, a interface ‘Comparable’ possui um metodo chamado compareTo que vc vai precisar implementar. Pra que isso ? caso vc tenha um vetor ou arraylist de objetos pertencentes a tua classe, vc pode ordena-los com o método sort.

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Comparable.html

É um exemplo. Normalmente no inicio não lidamos com interfaces até fazer bastante exercicio sobre isso.

Você usa o extends para herança direta de uma classe. Por exemplo:

class Elefante extends Animal {}
class Chimpanze extends Animal {}

E o implements para implementar interfaces:

class Elefante extends Animal implements Quadrupede, Herbivoro {}
class Chimpanze extends Animal implements Bipede, Saltitante {}

Uma regra geral é de que herança (extends) implica em reuso de código comum a classes de uma mesma hierarquia e implementações (implements) implicam em distribuição de comportamentos. Por exemplo, todo Animal tem um DNA, não importando se ele é um Elefante, um Chimpanze, um Salmao ou uma Cobra. Mas, como Chimpanze implementa Saltitante, assim como BonecoDoPulaPirata também implementa Saltitante, isso significa que eu posso esperar que os dois tenham o método saltar(). Mas cada um faz de um jeito diferente.

Em código:

class Animal {
// ...
    public DNA getDNA() {
        // Código absurdamente complicado para extrair o DNA deste Animal,
        // que acabará servindo para praticamente todas as subclasses de Animal,
        // exceto talvez a subclasse de Humano chamada Mutante (X-Men 3 vai estréia sexta :)
    }
//...
}

interface Saltitante {
    // Métodos em interfaces não têm implementação, as classes que as implementam
    // que devem implementar estes métodos.
    // Assim, cada Saltitante salta de uma maneira específica.
    void saltar() ; 
}

class Chimpanze extends Animal implements Saltitante {
    // ...
    void saltar() {
        // implementa a capacidade de saltar, que todo Saltitante deve ter
    }
}

class BonecoDoPulaPirata extends Brinquedo implements Saltitante {
    // ...
    void saltar() {
        // implementa a capacidade de saltar, que todo Saltitante deve ter
    }
}

Estude Programação Orientada a Objetos para entender este e outros conceitos.

4 curtidas

Quando você tem uma classe que implementa a interface, você é obrigado a escrever o método que está definido na interface dentro da classe, mesmo que dentro deste método não haja código nenhum.
Se você fizer um extends não é obrigado a escrever o método na classe, a não ser que a superclasse seja abstrata.

Outro exemplo clássico é aquele que mostra o super-homem, o homem, o mamífero e o voador.

O homem é descendente do mamífero, mas e o super-homem? Ele possui as características de algo que voa (voador) e também do homem, mas como representar isso em Java? Implements seria também uma forma de colocar disfarçadamente em Java uma “herança múltipla”, que é possível em outras linguagens.

Ah, ok ok

:smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley:

perfeita explicaçao #@®®¡$ e Roger75, obrigada mesmo, agora entendi perfeitamente!!!

obrigada!!!

[quote=Roger75]Outro exemplo clássico é aquele que mostra o super-homem, o homem, o mamífero e o voador.

O homem é descendente do mamífero, mas e o super-homem? Ele possui as características de algo que voa (voador) e também do homem, mas como representar isso em Java? Implements seria também uma forma de colocar disfarçadamente em Java uma “herança múltipla”, que é possível em outras linguagens.
[/quote]

Não exatamente, o Super-Homem é alienígena. :stuck_out_tongue: (o filme dele estréia em junho, acho)

OK, ok, já viajei demais, hehehe

Parabéns Roger um ótimo exemplo!

Olá gente, vi essa página sobre interface e herança bom, talvez vcs pudessem me ajudar a organizar um programa. A ideia é a seguinte: Eu tenho uma classe INTERCONEXÃO. Essa interconexao ela pode ser uma LINHA ou um TRANSFORMADOR. Bem INTERCONEXAO contem elementos como DE, PARA dentre outros. LINHA tem alguns paramentos e TRANSFORMADOR outros.

Alem disso uma interconexão pode possuir CARGA, REGULADOR, BANCO_CAPACITOR que sao outras classes tbm. Nao necessariamente tem todas ou só um. depende de cada interconexão.

Por fim, eu tenho uma classe chamada alimentador que tera um vetor de INTERCONEXÕES. A medida que le um banco de dados ou um arquivo ele vai decidir se vai ser LINHA ou TRANSFORMADOR e se vai ter CARGA e/ou REGULADOR e/ou BANCO_CAPACITOR.

Por favor me deem ideias. de como implemente hierarquia me ajudariam nisso

Após ler algumas dicas sobre interface, senti uma dúvida.

Se alguém puder me ajudar, gostaria de saber a diferença entre uma classe abstrata (superclasse) e interface.

Pq a classe filha obrigatoriamente terá que implementas os métodos da classe pai, uma vez que, ela é abstrata, qual a difereça se criarmos uma interface ?

:?:

A classe só pode ter uma classe mãe, então com a interface a classe vai ficar livre para extender outra classe

  1. A classe abstrata pode ter métodos concretos (com implementação). Na verdade, você pode até ter uma classe abstrata sem nenhum método abstrato (é o caso das classes “Adapter” do Java, como a mouse adapter);
  2. Classes abstratas podem ter atributos;
  3. Interfaces representam apenas um contrato. Portanto, é possível herdar de mais de uma interface.
  4. Você pode herdar interfaces em qualquer ponto da hierarquia. Ou seja, uma classe sua com uma classe mãe poderá tranquilamente implementar uma interface. Isso torna interfaces muitíssimo mais flexíveis. Se fosse fazer com classes abstratas, vc teria que sempre coloca-las em algum ponto no topo da sua hierarquia.

Se puder escolher entre classe abstrata e interface, escolha a interface.

Muito obrigada!!! :smiley:

Obrigada!!!