Qual é o objetivo da interface em Java? Qual é a razão de sua existência? Qual é a falta que ela faz?
Notem que não estou perguntando como utilizá-las.
Muito obrigado!
Qual é o objetivo da interface em Java? Qual é a razão de sua existência? Qual é a falta que ela faz?
Notem que não estou perguntando como utilizá-las.
Muito obrigado!
na interface vc define um comportamento mais abstrato, depois com as classes mais especializadas vc implementa a interface e especifica os detalhes desse comportamente, tipo na interface Comparable do proprio java, vc usa um algoritmo de ordenação do Collections que consegue ordenar os objetos de uma classe q vc criou, pq o o algoritmo do Collections pede um objeto que implemente a interface Comparable. Outro exem,plo é com as listas do java, List é uma interface, voce poderia declara-la assim:
List<Integer> lista = new ArrayList<>();
lista = new LinkedList<>();
lista = new Vector<>();
no trecho acima vc declarou uma List e instanciou como ArrayList, pq ArrayList implementa a interface List, depois mudou o tipo da sua lista pra LinkedList, depois pra Vector, vc poderia mudar a instancia da sua lista pra usar a implementação dela q for mais conveniente no momento, voce pode fazer isso pq todas esses tipos de lista implementam a interface List
O problema é que entender uma interface requer saber como utilizar uma interface.
1 - Ampliar a aplicação de conceitos de orientação a objetos, tais como polimorfismo e encapsulamento, aplicando a idéia de baixo acoplamento e alta coesão. Parto do princípio que você saiba o que são estes conceitos.
2 - A função de uma interface é ser o canal de acesso de um objeto da classe A que pretenda comunicar-se com um objeto que tenha as funcionalidades (operações na UML e métodos no Java) que esta interface provê. Uma interface nunca terá implementação dos métodos que define, esta não é sua responsabilidade.
3 - Você acaba expondo mais do que deveria, quando você ignora a idéia do uso de interfaces (ou o por quê ou o como ela funciona), permite que o objeto da classe A tenha um acoplamento maior que o devido, ele saberá demais de um outro objeto de uma outra classe que contenha os métodos que ele necessita.
Entendeu?
Acho que a palavra “abstrato” não cabe quando falamos de interface, tanto porque os iniciantes podem confundir com o funcionamento do modificador abstract.
Eu costumo dizer que interface é como um contrato, onde são apenas definidos os métodos. Uma interface diz o que deve ser feito e não como.
interface Calculadora{
String somar(int a, int b);
}
Para utilizar o método somar será necessário que uma classe física implemente a interface Calculadora, e esta classe vai implementar irá dizer como a operação será feita.
O que eu acho mais legal do uso de interfaces é que podemos ter uma maior segurança de que todos os métodos que foram definidos foram implementados, caso contrário teríamos um erro de compilação.
Outra coisa legal utilizando interface é que diminuímos o acoplamento do sistema, sendo altamente recomendado por facilitar em muito na manutenção.
Abs!
concordo com freakazoid, eu iria lhe dizer a mesma coisa que ele…
[quote=freakazoid]Acho que a palavra “abstrato” não cabe quando falamos de interface, tanto porque os iniciantes podem confundir com o funcionamento do modificador abstract.
[/quote]
Como confundir?
Todo método de uma interface é abstract, meu camarada, porém, assim como todas as classes extends java.Lang.Object, não há por que explicitar essa declaração.
Ela é feita apenas em classes abstratas, quando quero declarar o método e não quero implementá-lo.
[quote=drsmachado][quote=freakazoid]Acho que a palavra “abstrato” não cabe quando falamos de interface, tanto porque os iniciantes podem confundir com o funcionamento do modificador abstract.
[/quote]
Como confundir?
Todo método de uma interface é abstract, meu camarada, porém, assim como todas as classes extends java.Lang.Object, não há por que explicitar essa declaração.
Ela é feita apenas em classes abstratas, quando quero declarar o método e não quero implementá-lo.[/quote]
Concordo, assim como todos os valores constantes definidos em uma interface são implicitamente public, static e final.
Mais acho que de acordo com o que o cara for estudando, ele deve ter a obrigação de saber que qualquer coisa “abstrata” significa que terá que sobrepor algo sempre, nesse caso os métodos que são implementados na interface. E o exemplo do contrato acima também ficou muito claro.