Dúvida na declaração de interface

7 respostas
ricardospinoza

Olá pessoal,

São duas dúvidas:
Pq os métodos de interface não podem ser static?

Já que os métodos da interface são implicitamente public e abstract, pq não podem ser final*, native, stricfp ousynchronized?

  • final imagino que seja pq é abstract. não faria sentido ser abstrato e ninguém poder modificar rsrsrs

7 Respostas

InicianteJavaHenriqu

Você já leu a documentação da classe, né :?:

É para tirar certificação :?:

ricardospinoza

é pra certificação sim.

Rapaz, não li a documentação. vc tem o link fácil ai?

B

Não pode ser final porque a classe que implementa a interface precisa definir o comportamento do método.

InicianteJavaHenriqu

ricardospinoza:
é pra certificação sim.

Rapaz, não li a documentação. vc tem o link fácil ai?

Boa sorte na certificação :smiley:

segue os links
:arrow: http://docs.oracle.com/javase/tutorial/java/concepts/interface.html
:arrow: http://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html

Tem mais bastante material bom aqui no fórum e na web. Como eu não tinha o link aqui “fácil” solicitei ao meu amigo Google.

flw :thumbup:

D

Olá,

Métodos de interface não poder ser static porque os métodos statics não são herdados em suas subclasses.
Por exemplo:

class A {
   static void metodoA(){}
}
public class B extends A {

   static void metodoA(){} //isto não é um override

   public static void main(String [] args) {
      A a = new B();
      a.metodoA(); // chama a versão do método definido na classe A 
   }
}

Como não é possível herdar métodos statics e interface são abstracts imagine a seguinte situação:

interface ExemploA {
   static void metodoA();  //definição ilegal.
}

class ExemploAImpl implements ExemploA {
   static void metodoA() { }
}

public class ClassePrincipal {
   public static void main(String [] args) {
      ExemploA a = new ExemploAImpl();
      a.metodoA(); //chamaria a versão do método definido na interface ExemploA, porém não existe nada implementado. (Não faz o menor sentido)
   }
}
muehlner

O modificador estatico diz que determinado atributo ou metodo pertença a classe, é não a cada objeto

Isso siginifica que você não precisa de uma instancia para acessar essa atributo ou metodo

public class Carro() {
public static int totalDeCarros;
}

e para acessar

carro.totalDeCarros = 5;

[b]final - em caso de herança, o metodo não pode ser sobrescrito nas classes filhas

ou seja

como interface é 100% abstrata todos os seus metodos tem que ser implementados[/b]

ricardospinoza

Obrigadio pessoal, os exemplos são esclarecedores.
Eu nem fazia idéia que atributo estático não pode ser herdado. Li tbem em algum lugar do forúm que as interfaces auxiliam no polimorfismo.

Mais uma vez agradecido e feliz páscoa pra vcs e suas familias!!!

Criado 6 de março de 2012
Ultima resposta 7 de abr. de 2012
Respostas 7
Participantes 5