Povo, qual a diferença entre interface e classe abstrata?
ateh pq ambas posso fazer somente a assinatura dos métodos, certo?
mas, uma classe abstrata pode ter métodos concretos certo, eh isso mesmo?
agora, qual a finalidade de uma interface?
Povo, qual a diferença entre interface e classe abstrata?
ateh pq ambas posso fazer somente a assinatura dos métodos, certo?
mas, uma classe abstrata pode ter métodos concretos certo, eh isso mesmo?
agora, qual a finalidade de uma interface?
Nem sempre. Uma classe abstrata pode conter implementação. Os métodos que não possuem implementação são declarados como abstratos, e aí sim eles devem conter apenas a assinatura.
Sobre interfaces, dê uma lida nesse artigo:
:arrow: http://www.guj.com.br/java.artigo.123.1.guj
[]'s
a interface você não pode fazer a implementação de nenhum método, diferente das classes abstratas e a casse que implementar aquela interface vai ter que obrigatoriamente implementar todos os métodos daquela interface
Eu nunca consigo explicar isso direito quando me perguntam. Vou tentar mais uma vez. Se eu falar caca me avisem!
Tudo que vc faz com uma interface vc consegue fazer com uma classe abstrata. Com classes abstratas vc pode ir além e implementar alguns métodos.
Mas o pulo do gato é:
Seu objeto pode implementar um milhão de interfaces, mas apenas pode extender uma classe abstrata.
Interface é uma solucão muito elegante e eficiente para resolver o problema da herança múltipla, isto é, foram as Interfaces que permitiram ao Java se livrar da herança múltipla.
Agora quando vc deve usar uma e quando vc deve usar outra é uma coisa de feeling, não consigo explicar.
[quote=“saoj”]Eu nunca consigo explicar isso direito quando me perguntam. Vou tentar mais uma vez. Se eu falar caca me avisem!
Tudo que vc faz com uma interface vc consegue fazer com uma classe abstrata. Com classes abstratas vc pode ir além e implementar alguns métodos.
Mas o pulo do gato é:
Seu objeto pode implementar um milhão de interfaces, mas apenas pode extender uma classe abstrata.
Interface é uma solucão muito elegante e eficiente para resolver o problema da herança múltipla, isto é, foram as Interfaces que permitiram ao Java se livrar da herança múltipla.
Agora quando vc deve usar uma e quando vc deve usar outra é uma coisa de feeling, não consigo explicar.[/quote]
heranças multiplas??? num livro que eu li de Java dizia que no Java nao há heranças multiplas como há no C++, pq? e oq isso melhora?..
Como seriam as heranças multiplas???
Heero, o saoj também não disse que há herança múltipla em Java, leia direitinho o que ele escreveu.
Nao eu nao estou falando que ele disse, eu queria saber se realmente Java nao possui multipla herança e pq a multipla herança é tao ruim.
Não, não possui.
Cara, infelizmente, nunca programei na familia C. Mas imagino que deve ser um inferno gerenciar isso. Além de não conseguir pensar num objeto que é três ou mais coisas ao mesmo tempo hehe
Uma vez eu lembro de ter lido sobre isso e a quesrtão é que o código em Java fica mais robusto e eficiente não usando herança múltipla…
Galera, essa parada de Classe Abstrata x Interfaces eh meio “complicado” pela seguinte forma:
Digamos que eu tenha:
[color=“red”]public abstract class Mensagem{
[ public void enviar();
}[/color]
[color=“red”]public interface Mensagem{
void enviar();
}[/color]
Digo: Ah mesma coisa certo? criei a casa, depois implemento.
Agora, em uma classe abstrata, eu posso ter métodos concretos…enquanto em uma interface não posso fazer isso.
Quanto a herença multipla (C++, ou melhor ++C hehehe), fica uma bagunça. pq?
Imaginem uma classe ter vários métodos, e estends N classes…perde um pouco de controle, estou certo?
Cara, a JAVA eh uma linguagem fascinante, não soh pela robustez, tipagem enfim…mas, pela clareza que a mesma poussi.
Bom, agora, qdo e como usar Interface e classe Abstrata, cabe o Desenvolvedor avaliar…certo?
Galera, me corrigem por favor…
[]´s
Olá,
Interfaces são contratos. quando você implementa uma interface, diz para alguém que sua classe vai implementar os métodos da Interface.
Classes abstratas são entidades…abstratas! Definem tipos, como classes, mas os tipos não podem ser instanciados. Eles podem conter partes de implementação, ams seus filhos, conceitos concretos, devem completar isso.
Herança múltipla é complexa em termos de sintaxe e projeto, mas não é anda impossível. Não vejo real motivo para ter herança múltipla em Java hoje, mas não é nada de outro mundo.
[]s
E certo afirmar que:
Interface
:arrow: Pode apenas ser implementada e não extendida
:arrow: Todos os seus metodos tem de sobrescritos
Classes Abstratas
:arrow: Não podem ser instanciadas apenas extendidas
Isso foi uma pergunta?
[quote=“passos”]E certo afirmar que:
Interface
:arrow: Pode apenas ser implementada e não extendida
[/quote]
Cuidado, uma interface pode extender outra
[]s
Sim isto era uma pergunta
Legal não sabia disso, vou testar.
Existe alguma outra afirmação que diferencie Interface x Classe Abstrata?
Gosto de explicar “interface” e “classe abstrata” através de um exemplo concreto.
Quando você vai à loja e compra uma TV com DVD incorporado, modelo Philips AD-1234, você está levando para casa um objeto que é uma instância da classe PhilipsAD1234.
Essa classe PhilipsAD1234 implementa as seguintes interfaces:
TV - contendo os métodos ligar(), visualizar(), etc.
DVD - contendo os métodos ligar(), reproduzirDisco(), etc.
Note que ambas as interfaces têm um método em comum (ligar), mas isso não ocasiona conflitos.
Ela é extensão de uma classe abstrata “PhilipsTV” que representaria todas as TVs Philips, que têm alguns componentes em comum (digamos a fonte chaveada, que é um “private member” dessa classe); mas você não consegue ir à loja e comprar uma instância da classe abstrata PhilipsTV; consegue apenas adquirir uma instância da classe PhilipsAD1234, PhilipsQR9876 etc.
Se você comprar uma TV modelo Sony XY-5678, você está levando para casa um objeto que é uma instância da classe SonyXY5678, que implementa a interface TV, tal como a TV Philips citada acima.
Mesmo que a TV Sony não tenha nenhum componente em comum com a TV Philips, nem por isso deixa de ser uma TV, já que implementa a interface TV.
Portanto:
Boa analogia Thingol !!!
Um exercício interessante é pensar porque a Sun não criou uma interface InputStream e sim uma classe abstrata InputStream.
Por que não temos uma interface InputStream e um BaseInputStream ou AbstractInputStream que implementa ela ???
Tudo bem que ela queria oferecer uma implementação default para alguns métodos, mas isso poderia tb ser conseguido com o AbstractInputStream.
A API de collections usa esse esquema de uma Interface (ex: List) e uma classe abstrata base (ex: AbstractList).
Alguém sabe porque a Sun fez o framework de IO dessa maneira, se há alguma vantagem ou desvantagem nisso, etc e tal ???
[PALPITE ON]
Como a IO possui muitas features que dependem diretamente do sistema operacional implementadas diretamente na VM, a Sun nao quis que isso fosse implementado pelo usuario, deixando isso a seu cargo.
[/PALPITE OFF]
InputStream tem um mínimo de implementação, olhe o código fonte. É pouca coisa, mas é alguma coisa
[]s
Eu cansei de ver aquelas explicações de Orientação a Objetos com aqueles exemplos “Cachorro é Animal, Gato é Animal, Totó é uma instância da classe Cachorro” e assim por diante. Chega de bichos… Por exemplo, é difícil explicar interfaces com bichos, mas é bastante simples explicá-las com máquinas.
Além disso esses exemplos com bichos induzem as pessoas a designarem hierarquias muito profundas de classes, porque afinal de contas:
Totó é um cachorro, que pertence à espécie Canis lupus, que pertence à família dos canídeos, que são carnívoros, que são mamíferos, que são vertebrados (Chordata), que são … que são Eucariontes, que são … etc. etc. etc.
Você sabe aquelas coisas de subespécies, espécies, famílias, superfamílias, gêneros, filos, reinos e outras classificações taxonômicas. Deve ter algum biólogo aqui que pode me informar melhor.
Vc só não falou do lance do InputStream.
Alguma idéia sobre o porque daquilo ??? Faz diferença no final das contas ???