Entendendo interfaces

7 respostas
jason_bourne

Pessoal,

Estou tentando entender essas interfaces:

public interface Pesado {
    double obterPeso();
 }
 
 public interface Colorido {
    Color obterCor();
 }
 
 public class Porco extends Animal 
 implements Pesado, Colorido {
    public void fazerBarulho() {
        System.out.println("Óinc!");
    }
 
    //Implementação da interface Pesado
    public double obterPeso() {
        return 50.00;
    }
 
    //Implementação da interface Colorido
    public Color obterCor() {
        return Color.BLACK;
    }
 
    //Um método só do porco
    public boolean enlameado() {
        return true;
    }
 }

Qual é a vantagem de se usar essas duas interfaces nesse caso em particular?

7 Respostas

Marky.Vasconcelos

Em algum lugar se você quiser ter um metodo que retorne o peso de alguém você pode passar qualquer Objeto que implemente Pesado.

public interface Pesavel{
double obtemPeso();
}
class Homem implements Pesavel{
public double obtemPeso(){
return 62.5;
}
}
class Elefante implements Pesavel{
public double obtemPeso(){
return 1250.6;
}
}
class TestaPesos{
public static double getPeso(Pesavel pesavel){
return pesavel.obtemPeso();
}
public static void main(String[] args){
Homem h = new Homem();
Elefante el = new Elefante();
System.out.println(getPeso(h));
System.out.println(getPeso(el));
}
}

O método getPeso não liga se é um Homem um Elefante ou uma Pedra desde de que seja um Object pesavel ele aceita como argumento.

sergiotaborda

Nesse caso particular nenhuma já que é apenas um exemplo de como se usam interfaces.

jason_bourne

sergiotaborda:
eduacsp:

Qual é a vantagem de se usar essas duas interfaces nesse caso em particular?

Nesse caso particular nenhuma já que é apenas um exemplo de como se usam interfaces.

Há…eu tava pensando q tava ficando louco pq não via nenhuma vantagem nessas interfaces.

Obrigado a todos.

Grinvon

Você ainda pode implementar a interface de forma “anônima”. Veja esse exemplo:

public class Pesar {
    
    public Pesar() {
        System.out.println("Peso: " + getPeso());
    }
    
    public double getPeso() {
        return new Pesavel() {
            public double obterPeso() {
                return 100.12;
            }
            
        }.obterPeso();
    }
    
    public static void main(String[] args) {
        new Pesar();
    }

}
peczenyj

Ok, vc tem um Porco.

O Porco é um Animal, o que significa que vc pode fazer

Porco p = new Porco(); Animal a = new Porco();

Agora, com estas interfaces vc também pode fazer

Pesado pe = new Porco(); Colorido co = new Porco();

As vantagens? veja esse exemplo:

public class Arca{ public double total; public Arca(){ this.total = 0.0; } public add(Pesado coisaPesada){ this.total += coisaPesada.obterPeso(); } public double getTotal() { return this.total; } }

Pronto, agora vc pode colocar o que quiser nessa arca: animais, um piano, comida… :wink:

jgbt

Interfaces servem basicamente para definir um contrato que todas as classes que a implementam devem seguir.
De uma olhada na api de JDBC do Java, que é praticamenre toda baseda em interfaces.
A Sun definiu o contrato(interfaces) que classes que vão implemtar esse contrato deve seguir. Isso pq, por exemplo, quando vc criar uma uma conexão vc não quer se importar com qual banco vc conectou, mas sim que vc pode chamar metodos dessa conexão que retornaram algo que estaria no contrato.
tipo:

Connection con = // conexão para qualquer banco
        Statement stm = con.createStatement();

o contrato da interface Connection diz que quem a implementou deveria implementar o metodo createStatement. Mas dependendo do banco, esse objeto Statement é criado de formas diferentes, mas para quem utiliza a interface Connection isso deve ser transparente.

[]´s

T

Não sei se vc já sabe, mas tem um tutorial muito bom que aborda esse assunto, aqui no guj.
http://www.guj.com.br/java.tutorial.artigo.123.1.guj

Criado 12 de dezembro de 2007
Ultima resposta 12 de dez. de 2007
Respostas 7
Participantes 7