Duvida sobre herança multipla com interfaces

10 respostas
L

eu to qurendo criar as classes necessarias de um e-mail.
entao estava tentando usar interface simulado uma herança multipla
mas num sei se deveria usar outra coisa.. estou um pouco confuso em OO.

exemplo do problema:

eu tenho 2 classes:

public class RFC882{
     int x;
     string y;
}

public class MIME{
      int z;
      char ch;
}

e quero criar uma terceira classe q tenha esses 4 atributos e talvez alguns mais.

public class header {
     int x;
     string y;
     int z;
     char ch;

     public header()
     {
     }
}
se java suportasse heranca multipla creio q eu faria isso
public class header extends RFC822,MIME{
...
}

entao gostaria que me informassem como faço pra transformar as classes MIME e RFC882 em interfaces..

e sei q nao posso ter variaveis dentro de interfaces..
entaum pensei em algo como declarar

interface RFC882{
     get_int x();
     get_string y();
}

interface MIME{
      get_int z();
      get_char ch();
}

por ae.. num sei se to viajando.. mas de qlq forma..

agradeço desde já

10 Respostas

peczenyj

Não vai adiantar vc transformar estas classes em interfaces pois uma interface é implementada, não extendida. ela vai forçar vc a declarar os atributos que vc quer. se não declarar os atributos de novo a classe não
compila.

Agora, se vc tem 2 classes com os atributos que vc precisa, pra que herança multipla? crie uma terceira classe que tenha como atributos estas 2 classes ;-)

public class A{
  
}
public class B{

}
public class C{
 private A a;
 private B b;
 
}

Perceba agora o seguinte: beleza vc tem 3 classes. De repente vc quer alterar a classe A. qual o impacto na C ?

Pra não ficar muito 'sujo', vc pode gerar metodos para acessar os seus atributos. Logo se A tem os atributos x,y,z,w,k,ç... não importa o que importa é que A faça o seu papel. É uma forma de pensar a programação, compactar partes uteis do código, não gerar atributos e metodos a lá loca só porque dá pra fazer ;-)

L

entendi cara…
vc tah certo.

mas agora já de tanto olhar e ler sobre interfaces agora estou curioso mesmo ehehe

interface CMIME
      {
	 void Content_Type()
                 {
	      string get();
	      void set(string x);
	  }
      }

eu posso fazer isso??

pq eu gostaria de na classe q iplementasse essa interface

eu declararia assim, e a variavel Content_Type estaria nesta classe

void Content_Type().get()
        {
	return Content_Type;
        }
L

ahh e outra coisa …

uma interface pode implementar outra?

exemplo:

interface CMIME inplements get_set
{
    void Content_Type();
}

interface get_set
{
     string get();
     get void set(string x);
}

seria pra tentativa de usar Content_Type().get(); ou Content_Type().set(“blah”);

P

interface não pode implementar outra interface !!!

uma interface estende interface não implementa !!!
Alias uma interface pode estender varias interfaces…

Interface nunca implementa alguma coisa !!

xandinhocavalcante

Bom, Java não tem a tal herança multipla. A função da interface é tentar suprimir esta falta? As interfaces são de grande uso na vida de um programador?

keller

Sim , sao. Exemplo:

public interface GenericDAO{
  public Serializable save( Object o );
  public void saveOrUpdate( Object o );
  public void delete( Object o );
  public void getByExample( Class clazz );
  public void findByExample( Object o );
}
public interface PesquisaDAO extends GenericDAO{
   public List getByDescription( String description );
}
public class GenericDAOImpl implements GenericDAO{
   // implementacao dos metodos da interface..
}
public class PesquisaDAOImpl extends GenericDAOImpl implements PesquisaDAO{
  //tenho que implementar apenas o getByDescription aqui..
}

Nao precisamos ficar reescrevendo codigo.

E trabalhamos com a interface PesquisaDAO
a maneira que ela foi implementada pouco importa…

Algo mais root:

List arrayList = new ArrayList();
List linkedList = new LinkedList();
//trabalhamos com a List e nao com suas impl.

Sacou ? Espero que ajude…
Até… :thumbup:
[]s

Luca

Olá

Não, o conceito de uso herança múltipla vai além do uso de interfaces com Java. Em alguns casos limitados, se pode fazer uma gambiarra com interfaces para simular herança múltipla. Mas repito, só em casos isolados. Para entender Java, parta dos conceitos básicos do Java. Um deles é que Java não tem herança múltipla.

Sim, procure pelo conceito programar para interfaces.

Uma das vantagens de programar para interfaces é exatamente só se basear em herança o mínimo possível. É poder alterar o sistema com mais facilidade sem precisar alterar todos os demais sistemas que compartilham a mesma API.

[]s
Luca

akumaldo

Hoje em dia tem muita coisa contra a herança…por que tem casos que ela quebra o encapsulamento…o conceito básico da orientação a objetos!:expressionless:
interfaces é de grande poder para o java, com elas podemos ter o beneficio do polimorfismo e ter um código mais encapsulado …

Mantu

Mas até onde eu sei, polimorfismo se manifesta através de herança.

E

Existe uma visão um pouco tacanha de orientação a objetos como uma simples maneira de organizar melhor o seu código. Essa visão é facilmente desmentida pelos conceitos de encapsulamento, interfaces, packages e outros…

Criado 18 de julho de 2006
Ultima resposta 19 de jul. de 2006
Respostas 10
Participantes 9