Classe - interface [Resolvido]

Boa tarde :slight_smile:

Estou dando uma geral nas classes, encontrei o seguinte codigo:

public interface NomeDaClasse {

}

Qual(ais) função(ões) tem essa classe?

[]s

Uma interface vazia, tal como você apresentou,

a) não é uma classe
e
b) tem zero funções.

Essa interface vai ter apenas as assinaturas dos métodos, quais assinaturas ??? dependo do teu sistema, do que vc precisa.
Todas as classes que implementarem essa interface terá obrigação de implementar essas assinaturas.

Onde eu trabalho tem uma dessa. A princípio serve apenas para marcar as classes com estrutura web ( no caso daqui ).
Se algum dia resolverem implementar alguma coisa …

Uma interface vazia, também conhecida como “marker interface”, serve para algum programa determinar se uma determinada classe tem uma determinada propriedade, usando instanceof. Hoje em dia, prefere-se usar uma “annotation”, a menos que você realmente precise de muito desempenho (usar instanceof é mais rápido que checar se uma classe tem uma determinada anotação) e você só precise de algo muito simples sobre a classe - nesse caso, se a classe implementa ou não a determinada “marker interface”.

Um exemplo de uma interface vazia dessas é a java.io.Serializable.

Boa tarde KaosBr.

Para começar, Interfaces não são Classes, mesmo que elas se pareçam.

Costuma-se cometer esse engano porque dizem por ai que uma Interface é uma Classe totalmente abstrata.

O que é uma Classe Abstrata :?:

Classe Abstrata é aquela que possui alguns métodos abstratos, veja bem, eu disse alguns métodos e não todos, ou seja. Métodos abstratos são apenas declarados, porém não implementados, a finalidade disto é que quando uma classe herdar de uma classe abstrata, forçar implementar todos os métodos abstratos na classe herdada. Ex.


public abstract class Animal {

     public void andar() {
         System.out.println("Estou andando");
     }

     public abstract void alimentar();
}

Repare que o método alimentar foi apenas declarado porém não implementado, ou seja, não há definição do ele vai executar, e isto que é método abstrato, e toda classe que possui pelo menos um método abstrato, a classe é abstrata.

Mas qual é a finalidade do método abstrato :?:

No exemplo declaramos uma classe Animal, porém não sabemos qual o tipo de animal iremos tratar, sabemos que todo animal anda, por isto o método andar() foi implementado, entretanto podemos saber qual alimento do animal sem sabermos qual é o seu tipo. :?: Pois é, procedimento similares a este ocorrem muito em linguagens Orientada a Objetos.

Vamos então ao exemplo abaixo:


public class Vaca extends Animal {

     public void alimentar(){
         System.out.println("Estou comendo capim");
     }
}

Repare que a classe Vaca extende (Herda) Animal e o método alimentar que foi declarado com abstrato na classe Animal, foi forçado a ser implementado na classe Vaca, e sem a declaração abstract, isto porque se voce continuasse a declará-lo como abstract, o método continuaria a ser abstrato assim como a classe Vaca também seria uma classe Abstrata, e pelo menos, por enquanto, a finalidade não esta.

Interfaces.

Como disse antes, Interfaces não são Classes, apesar de parecerem. Uma Interface tem que ter abstração pura, ou seja, ela tem que possui todos os seus métodos abstratos, e a finalidade da Interface e implementar (e não Herdar), métodos em uma classe qualquer, em outras palavras, é forçar uma classe que implementa uma interface, a definir todos os seus métodos abstratos. Assim no exemplo anterior, se voce tivesse definido a classe Animal como interface, ficaria assim:


public interface Animal {

       public void andar();

       public void alimentar();

       public void falar();

}


public class Vaca implements Animal {

      public void andar() {
          System.out.println("Estou andando");
      }

      public void alimentar() {
          System.out.println("Estou comendo capim");
      }

      public void falar(){
          System.out.println("Estou mugindo");
      }
}

Repare que na Interface eu não precisei utilizar o modificador “abstract”, isto porque implicitamente uma Interface é totalmente abstrata.

Outra diferença entre Classe Abstrata e Inteface, é que a Classe Abstrata possui uma hierarquia de Herança que oriunda da classe mãe Object, enquanto que Interfaces não possui hierarquia de herança definida, a menos é claro, que voce defina uma árvore hierárquica de Interfaces, ou seja, que uma Interface vai herdar (extender) de outras Interfaces.

Boa tarde.

Obrigadão :slight_smile:

[]s