estou com uma dúvida sobre Interfaces Java. Li na documentação da Sun (e entendir que) estás interfaces são como “contratos”, e servem para contornar a ausência de herança múltipla que o Java não tem. Vi também estás interfaces são como métodos, entretando não se escreve ação que ele fará . Minha dúvida é como esta interfaces vai saber a ação que ele deve executar e se possível um pequeno exemplo sobre isto, porque no site da Sun só tem exemplos de sintaxe.
É isso aí: interface é só uma especificação do que você tem que implementar, um contrato. Mas, assim como um contrato não faz nada, a interface não tem código nenhum. Por exemplo, se você quer ter objetos que saibam dizer “oi”, você poderia ter:
interface Pessoa {
void dizOi();
}
Esse é o contrato de um objeto que diz “oi”. Agora você precisa aceitar esse contrato. Você pode fazer isso em várias classes diferentes. Por exemplo:
class Brasileiro implements Pessoa {
public void dizOi() {
System.out.println("Oi");
}
}
class Americano implements Pessoa {
public void dizOi() {
System.out.println("Hi!");
}
}
E aí você pode usar assim: imagine que você tem um método que faz a interface do usuário e ele recebe de algum lugar uma Pessoa para dar boas vindas ao usuário. Em Java, poderia ser assim:
E aí poderíamos chamar esse método de dois jeitos: iniciaInterface(new Brasileiro()) ou iniciaInterface(new Americano()). Você também pode ter variáveis do tipo de uma interface. Por exemplo:
Pessoa recepcionista = new Brasileiro();
Mas, como você não tem código na interface, você não pode fazer:
Pessoa recepcionista = new Pessoa();
Interfaces contornam o problema de herança múltipla porque você pode implementar várias interfaces, enquanto só pode herdar de uma classe. Por exemplo, a classe Brasileiro poderia “implements Pessoa, Habitante”, onde Habitante seria outra interface com mais métodos.
interface em java é difícil de aprender por que geralmente ensinam herança primeiro. diferente do C++ em que a maioria das apostilas ensinam primeiro interface.
Em C++ não existe o conceito de interface, como no Java. Você obrigado a implementa-lo no braço, usando um abstract base class com métodos virtuais puros. Entretanto, a linguagem não irá impor a você qualquer restrição quanto a implementar outros métodos ou propriedades, você deverá faze-lo simplesmente por uma boa prática e para que sua relação não vire de herança múltipla (e não recaia no famoso Diamante da Morte).
vinny qual o seu horário de auxilio aqui no guj?
por que pelo que venho vendo só você tá certo no grupo. coloca sua oposição acima inclusive do auxilio dos outros.
por isso eu disse no outro tópico sobre egocentrismo.
[quote=Elizeu_Santos]vinny qual o seu horário de auxilio aqui no guj?
por que pelo que venho vendo só você tá certo no grupo. coloca sua oposição acima inclusive do auxilio dos outros.
por isso eu disse no outro tópico sobre egocentrismo.[/quote]
Cara, no outro tópico a “ajuda” que um colega tinha dado era pedir para que se usasse um método deprecated, que o comportamento é extremamente perigoso e gera crash na aplicação. Você realmente acha que eu não deveria ter comentado nada a respeito?
Eu só comento nos fóruns de assuntos que conheço. Você praticamente não verá posts meus nos fóruns de web. Justamente porque tomo o cuidado para falar as coisas com certeza, e recomendar boas práticas. Acho que um post num fórum tem mais crédito, pois você confia na experiência do programador que te responde. É trágico quando gente no GUJ recomenda coisas sem nem sequer ler o Javadoc.
Ótimo, o artigo que você citou comprova exatamente o que falei sobre o C++.
Por isso citei que o conceito de interfaces igual ao apresentado no java, não existe no C++. Um arquivo .h representa a interface de uma classe, mas não se refere ao conceito da palavra chave interface da linguagem java.
Esse artigo mostra exatamente o que falei. Uma classe com todos os métodos virtuais puros e um destrutor virtual, feita pelo próprio programador. E descreve inclusive o que falei: que deve ser mantido assim para evitar o diamante da morte, e que é uma prática mantida pelo programador, e não imposta pela linguagem.
Deve-se usar interfaces sempre. Fiz um post que explica o porque, veja lá se você entende:
Se você não entender, relaxe um pouco. Estude um pouco mais sobre classes, objetos, use um pouco mais e depois volte nesse assunto. Geralmente só cai a ficha de como usar bem interfaces depois de um pouco de prática.
Em C++ não existe o conceito de interface, como no Java. Você obrigado a implementa-lo no braço, usando um abstract base class com métodos virtuais puros. Entretanto, a linguagem não irá impor a você qualquer restrição quanto a implementar outros métodos ou propriedades, você deverá faze-lo simplesmente por uma boa prática e para que sua relação não vire de herança múltipla (e não recaia no famoso Diamante da Morte).[/quote]
entendo… agora me responda… você ajudou em que na citação? acho que escreveu pra dizer que sabe de forma bem difusa (ou não).
não sou o primeiro a comentar seu comportamento, olha que te conheço a séculos. desde que eu era um militar abusado.
acho que você escreve mais para marketing pessoal.
mais como você é moderador, e eu um iniciante, não vou brigar.
gostaria apenas de deixar um artigo que recomendo a todos que passarem por aqui.
[quote=Elizeu_Santos]entendo… agora me responda… você ajudou em que na citação? acho que escreveu pra dizer que sabe de forma bem difusa (ou não).
não sou o primeiro a comentar seu comportamento, olha que te conheço a séculos. desde que eu era um militar abusado.[/quote]
Primeiro, esclarecendo que o conceito de interfaces no C++, como no java, não existe. Portanto, não adianta procurar nas tais apostilas, pois o que explicam primeiro não se refere ao que você tem no java exatamente.
Segundo, porque cito, ainda que de forma superficial, o problema que havia com a herança múltipla, o diamante da morte.
É essa a razão para existir interfaces em java, e a herança multipla ser proibida.
Se você acha que escrevo por marketing pessoal, porque você acha que os tópicos que respondo terminam quase sempre com a palavra [RESOLVIDO]?
esclareça-me. eu falei que é a mesma coisa?
eu falei que em c++ os livros impõem o conceito antes de instituírem o conceito de herança. e que isso possivelmente torna o aprendizado mais rápido.
fim de tópico pra mim. alias, o tópico já esta resolvido.