Cara eu estou estudando java e cheguei em uma parte que fala sobre interfaces, mas essa parte os caras deixaram bem por cima e não estou conseguindo entender, alguém poderia me explicar o que é e para que serve interface, e me dar algum exemplo. Não estou me referindo a interface de usuário.
Um exemplo que eu peguei no livor é esse :
publicinterfacecalculo
{
returncalculo;
}
Acho que era isso não estou bem lembrado o livro ficou em casa
Cara pelo que eu entendi nesses links, a interface funciona como um tipo de variável que fica disponível para qualquer classe usar, como no exemplo:
publicinterfaceJogar{voidchutar();}publicclassFutebolimplementsJogar{voidchutar(){System.out.println("Chutando uma bola!");}}
Mas não entendi a funcionalidade, por exemplo não existe nada armazenado na interface e não existe nada sendo enviado para a interface, apenas está imprimindo um frase que eu poderia fazer assim:
publicclassFutebol{publicstaticvoidmain(String[]args){System.out.println("Chutando uma bola!");}}
Não entendi a idéia de funcionalidade de usar interface.
Alguém poderia me explicar?
M
maluquo1PJ
Você usa interface quando quer que os métodos da interface sejam obrigatoriamente declarados na sua classe, mesmo que você não os implemente na sua classe, os deixando vazios, vai ter que declaralos.
Da uma lida aqui http://www.guj.com.br/java.tutorial.artigo.123.1.guj :joia:
A
alexandremanowarPJ
Ok maluquo1 desculpa de estou sendo chato, estou tentando entender
Estudei o link que vc deixou e fiquei com a seguinte dúvida.
Lá tem o seguinte código como exemplo:
Vish, vamo la vou tentar explicar!
Cara, imagine o seguinte:
Imagine que você tem uma Interface chamada Carro…
Irão existir 3 classes diferentes implementando essa interface Carro, elas serão chamadas de CarroEsportivo, CarroExecutivo, CarroConvencional blz?!
Imagine que a interface Carro tenha um metodo chamado motor e rodas por exemplo, todas as 3 classes classes que implementarão essa interface terão que declara esses metodos obrigatoriamente, mas elas poderão realizar a implementação desses metodos motor() e roda() de maneiras diferentes, pois eles são carros de tipos diferentes, um deles por exemplo terá um motor mais forte, o outro a roda maior algo desse tipo entendeu!?
Então eles terão funcionalidades em comum, porém eles poderão assumir comportamentos diferentes!..
Acredito que seja algo desse tipo!
Espero que te ajude!
Falou!
A
alexandremanowarPJ
No caso as três classes, são obrigadas a usar os dois métodos, motor() e roda()?
D
dumesticoPJ
Opa precisam sim, essa é a idéia da interface…
todos os métodos que foram declarados na interface devem ser obrigatoriamente declarados na classe, a implementação de cada um vem de acordo com a necessidade, mas declarados devem ser sim blz?!..
qualquer coisa posta ai!
Falou!
A
alexandremanowarPJ
Para finalizar e ver se eu entendi.
Interface é um método que eu crio para ser o padrão usado por uma ou mais classes, os métodos da interface são obrigados a serem declarados na classe mesmo que não forem usados. Então na realidade interface não passa de um tipo padrão para deixar o código mais simples de ser entendido ou lido e até mesmo para seguir uma certa regra de igualdade entre as classes a serem declaradas.
É isso ou eu sou muito burro?
Cara se não for isso eu vou incomodar mais porque enquanto eu não entende eu não desisto!
J
JavaDropsPJ
É um jeito de forçar a pessoa a pensar em todos os aspectos envolvidos quando vai implementar a classe.
É como se ele dissesse “ô cara, você está se esquecendo que tem que implementar o correr()”, mesmo que você não queira implementar um correr() para o seu animal, mas é um jeito de te fazer lembrar que o seu animal “pode” correr.
A
alexandremanowarPJ
Pessoal veleu pela força, com a ajuda de vocês entndi legal o que é interface. Já estou treinando.
Valeu
F
feliperodPJ
Cara,
Você me fez lembrar de mim mesmo quando cheguei no fórum… Custou pra eu ver utilidade em uma interface.
Eu já entendia como funcionava, mas ficava questionando se tinha sentido e o que isso agregava de valor no meu código. Até que com muito custo eu aceitei que é uma boa característica do java.
A
alexandremanowarPJ
E ae feliperod
Cara realmente a minha dúvida era essa, agora enchergo melhor a utilidade das interfaces. Ainda tenho pequenas dúvidas estou desenvolvendo exercícios para melhorar.
Mas é como vc escreveu, foi dificil entender
Cara eu to com umja seguinte dúvida eu quero usar uma interface assim:
Quero criar uma classe que use essa interface, é possível usar interface com variáveis definidas dessa forma?
Você pode me fazer um exemplo? Estou tentando mas não estou conseguindo, não importa qual seja o exemplo o importante é que a interface seja com essas idéia
F
feliperodPJ
Alexandre,
Quando você cria uma interfaces, você deve definir apenas as assinaturas dos métodos e nunca implementar os métodos.
Neste caso você esta tentnado implementar funcionalidade ao métod, porém isso deve ser feito na classe que implementar essa interface.
você deve criar um método na sua interface da seguinte forma:
public interface Calculo{
public double calculo(double aCalculo);
}
Essa seria a sua interface, e a implementação que faz esse método retornar alguma coisa seria feita na classe. Por exemplo:
publicclassFazCalculoimplementsCalculo{publicdoublecalculo(doubleaCalculo){//aqui você pode retornar qualquer objeto do tipo doublereturnaCalculo}}
Você também pode definir atributos em uma interface. Mas o importante é planejar muito bem a sua interface, para que ela possa ser útil para mais de uma classe, caso contrário ela perde o sentido.
feliperod
Valeu pela dica refresco legal a memória. Eu fiz um exercício da uma olhada cara por favor e vê se tem lógica ou se pelo menos eu consegui entender o conceito de interface, os códigos são esses:
publicinterfaceCalculo{publicdoublecalculo(doubleaCalculo);}publicclassInterfaceimplementsCalculo{privatedoubleentrada;privatedoublesaida;privatedoublesaldo;publicInterface(doublevalor){entrada=valor;}//aqui estou usando a interfacepublicdoublecalculo(doubleaCalculo){saldo=entrada-aCalculo;returnaCalculo;}publicdoublegetSaldo(){doublesaldofinal=saldo;returnsaldofinal;}}publicclassTestaInterface{/** Creates a new instance of TestaInterface */publicstaticvoidmain(String[]args){Interfaceteste=newInterface((double)500);teste.calculo(200);System.out.println("Saldo:"+teste.getSaldo());}}
Valeu mais uma vez pela força cara!
F
feliperodPJ1 like
Ok Alexandre,
Você entendeu sim… Só vou colocar usn comentários e umas modificações que eu acho relevantes. Veja o seu código alterado abaixo:
publicinterfaceCalculo{//Aqui tá beleza - É isso mesmopublicdoublecalculo(doubleaCalculo);}/* Eu não colocaria o nome da classe como Interface... interface é uma palavra reservada no Java. No seu caso vc usou Interface que é diferente, porém é bem próximo. Funcionaria sem problemas, mas pra não facilitar, vou mudar, ok.*/publicclassUsaInterfaceimplementsCalculo{privatedoubleentrada;privatedoublesaida;privatedoublesaldo;publicInterface(doublevalor){entrada=valor;}//aqui estou usando a interfacepublicdoublecalculo(doubleaCalculo){saldo=entrada-aCalculo;//esse método tá certinho, mas você deveria ter retornado saldo né?returnaCalculo;}publicdoublegetSaldo(doubleaCalculo){//para ter logica usar o metodo anterior, eu vou alterar esse aqui.//se você deixar assim, não precisava retornar nada no anterior.doublesaldofinal=this.calculo(aCalculo);returnsaldofinal;}}publicclassTestaInterface{/** Creates a new instance of TestaInterface */publicstaticvoidmain(String[]args){Interfaceteste=newInterface((double)500);//Repare que devido a alteração nos metodos acima, agora só precisamos chamar um dos dois metodo. //Veja como ficou.System.out.println("Saldo:"+teste.getSaldo(200));}}
A
alexandremanowarPJ
feliperod
Cara valeu pela força, entendi. Já estou desenvolvendo alguns exercícios
Até + cara.