[RESOLVIDO]Interface - acesso a variável dentro dela

19 respostas
ECO2004

Estou com uma dúvida com relação a interface…

package polimorfismoInterface;

public interface TesteInterface 
{
	int var = 19;
}

class AcessoInterface
{
	TesteInterface i;
	
	public static void main(String []args)
	{
		new AcessoInterface();
	}
	
}

Como é que eu faria o acesso à variável ‘var = 19’ ?
Testando, percebi que não consigo acessar ‘var’ estaticamente (toda variável dentro de uma interface é public static final ).

Outra coisa. No padrão de projeto “State”, uma classe possui uma instância de uma interface, tal como fiz acima.
Para que serve uma variável do tipo da interface?

19 Respostas

gRoOve

Tentou isso?

TesteInterface.var;
J

Não existe instância de interface. Existe uma instância da classe que a implementou.

Por exemplo:

public interface Funcionario {
           public double calculaSalario();
 
}

public Gerente implements Funcionario{
          public double calculaSalario(){
          //implementação aqui
           }
}

E você pode chamar assim:

Funcionario f = new Gerente();
Funcionario f = new Diretor() ;// partindo do princípio que Diretor implementa a interface Funcionário

Mas nunca:

Funcionario f = new Funcionario();

A não ser que seja assim:

Funcionario f = new Funcionario(){
          public double calculaSalario(){
          //implementação aqui
           }
};

Ai nesse caso você criou uma classe anônima que implementou a interface Funcionário.

E em relação a variável dentro de Interface, ela vira uma constante das classes que a implementaram. Então se eu colocasse uma variável x na interface Funcionários, ela seria uma constante de Gerente,Diretor e na própria interface. Mas na prática vi pouquíssimas vezes isso.

ECO2004
javablue:
Não existe instância de interface. Existe uma instância da classe que a implementou.

Por exemplo:

public interface Funcionario {
           public double calculaSalario();
 
}

public Gerente implements Funcionario{
          public double calculaSalario(){
          //implementação aqui
           }
}

E você pode chamar assim:

Funcionario f = new Gerente();
Funcionario f = new Diretor() ;// partindo do princípio que Diretor implementa a interface Funcionário

Mas nunca:

Funcionario f = new Funcionario();

A não ser que seja assim:

Funcionario f = new Funcionario(){
          public double calculaSalario(){
          //implementação aqui
           }
};

Ai nesse caso você criou uma classe anônima que implementou a interface Funcionário.

E em relação a variável dentro de Interface, ela vira uma constante das classes que a implementaram. Então se eu colocasse uma variável x na interface Funcionários, ela seria uma constante de Gerente,Diretor e na própria interface. Mas na prática vi pouquíssimas vezes isso.

Eu me expressei errado...quando eu disse que no padrão de projeto uma classe tinha uma instância da interface, quis dizer que essa classe possui uma variável do tipo da interface, como expus no meu exemplo...

ECO2004

1 - Agora, para que que serve uma variável do tipo interface?

Interface i;

No meu exemplo, a classe não implementa a interface.

Quero acessar var, diferentemente do código abaixo:

public interface TesteInterface 
{
	int var = 19;
	
}

class AcessoInterface implements TesteInterface
{
	TesteInterface i;
	
	
	public static void main(String []args)
	{
		new AcessoInterface();
		System.out.println(var);
	}
	
}

2 - Tem jeito que acessar var sem o “implements”?

gRoOve

Com relação a variável da Interface, ela só poderá ser acessada se um classe implementar a interface, correto?
Não entendi pq não e possível acessar direto a varíavel static pelo nome da Interface, é uma regra específica para Interfaces?

ECO2004

gRoOve:
Com relação a variável da Interface, ela só poderá ser acessada se um classe implementar a interface, correto?
Não entendi pq não e possível acessar direto a varíavel static pelo nome da Interface, é uma regra específica para Interfaces?

Acredito que sim, na sua primeira pergunta.
Na segunda, não dá acesso à ‘var’ usando acesso estático direto (Interface.var).

nel

ECO2004:
gRoOve:
Com relação a variável da Interface, ela só poderá ser acessada se um classe implementar a interface, correto?
Não entendi pq não e possível acessar direto a varíavel static pelo nome da Interface, é uma regra específica para Interfaces?

Acredito que sim, na sua primeira pergunta.
Na segunda, não dá acesso à ‘var’ usando acesso estático direto (Interface.var).

Quem lhe disse que não? Você e o gRoOve estão enganados.
Toda e qualquer variavél declarada dentro de uma interface é public, static e final, ou seja, imutavél.

Isso:

public interface IExemplo { public static final String EXEMPLO = "Teste"; }

É igual a isto:

public interface IExemplo { String EXEMPLO = "Teste"; }

Assim como também todo método em uma interface é publico e abstrato.
Portanto, para esse exemplo, é perfeitamente possível acessar a variavel EXEMPLO fazendo simplesmente IExemplo.EXEMPLO.

Entenderam? :slight_smile:
Abraços.

ECO2004

nel:
ECO2004:
gRoOve:
Com relação a variável da Interface, ela só poderá ser acessada se um classe implementar a interface, correto?
Não entendi pq não e possível acessar direto a varíavel static pelo nome da Interface, é uma regra específica para Interfaces?

Acredito que sim, na sua primeira pergunta.
Na segunda, não dá acesso à ‘var’ usando acesso estático direto (Interface.var).

Quem lhe disse que não? Você e o gRoOve estão enganados.
Toda e qualquer variavél declarada dentro de uma interface é public, static e final, ou seja, imutavél.

Isso:

public interface IExemplo { public static final String EXEMPLO = "Teste"; }

É igual a isto:

public interface IExemplo { String EXEMPLO = "Teste"; }

Assim como também todo método em uma interface é publico e abstrato.
Portanto, para esse exemplo, é perfeitamente possível acessar a variavel EXEMPLO fazendo simplesmente IExemplo.EXEMPLO.

Entenderam? :slight_smile:
Abraços.

Então tá, amigo. Conversa com o Eclipse…
Já compilou esse código?

A

ECO2004:

Então tá, amigo. Conversa com o Eclipse…
Já compilou esse código?

Eu compilei e funciona!

Em nenhum momento você postou um código que acesse a variável da interface conforme sugerido.

Que erro o Eclipse te dá? E com qual código exatamente?

Lembrando, quando você faz isso:

interface MinhaInterface {
  int minhaVariavel = 2;
}

classe MinhaClasse {
  public static void main(String[] args) {  
  }
}

MinhaInterface e MinhaClasse não compartilham informações por estarem no mesmo arquivo.

nel

ECO2004:
nel:
ECO2004:
gRoOve:
Com relação a variável da Interface, ela só poderá ser acessada se um classe implementar a interface, correto?
Não entendi pq não e possível acessar direto a varíavel static pelo nome da Interface, é uma regra específica para Interfaces?

Acredito que sim, na sua primeira pergunta.
Na segunda, não dá acesso à ‘var’ usando acesso estático direto (Interface.var).

Quem lhe disse que não? Você e o gRoOve estão enganados.
Toda e qualquer variavél declarada dentro de uma interface é public, static e final, ou seja, imutavél.

Isso:

public interface IExemplo { public static final String EXEMPLO = "Teste"; }

É igual a isto:

public interface IExemplo { String EXEMPLO = "Teste"; }

Assim como também todo método em uma interface é publico e abstrato.
Portanto, para esse exemplo, é perfeitamente possível acessar a variavel EXEMPLO fazendo simplesmente IExemplo.EXEMPLO.

Entenderam? :slight_smile:
Abraços.

Então tá, amigo. Conversa com o Eclipse…
Já compilou esse código?

Está precisando pegar um livro de Java e dar uma boa lida meu camarada.
Eu lhe dei um exemplo simples e que com certeza funciona.
Senão funcionar, é porque não tem Java instalado em sua máquina :slight_smile:

Bons estudos.
Abraços.

ECO2004

AbelBueno:
ECO2004:

Então tá, amigo. Conversa com o Eclipse…
Já compilou esse código?

Eu compilei e funciona!

Em nenhum momento você postou um código que acesse a variável da interface conforme sugerido.

Que erro o Eclipse te dá? E com qual código exatamente?

Lembrando, quando você faz isso:

interface MinhaInterface {
  int minhaVariavel = 2;
}

classe MinhaClasse {
  public static void main(String[] args) {  
  }
}

MinhaInterface e MinhaClasse não compartilham informações por estarem no mesmo arquivo.

Eu não postei porque não funciona…

package polimorfismoInterface;

public interface MinhaInterface 
{
	int var = 19;
}

class AcessarInterface
{
	MinhaInterface i;
	MinhaInterface.var;
}

Esse código acima não compila.

“Syntax error on token “var”, VariableDeclarator expected after this token”
ou se eu digitar apenas Interface, No Default Proposal

nel

AbelBueno:
ECO2004:

Então tá, amigo. Conversa com o Eclipse…
Já compilou esse código?

Eu compilei e funciona!

Em nenhum momento você postou um código que acesse a variável da interface conforme sugerido.

Que erro o Eclipse te dá? E com qual código exatamente?

Lembrando, quando você faz isso:

interface MinhaInterface {
  int minhaVariavel = 2;
}

classe MinhaClasse {
  public static void main(String[] args) {  
  }
}

MinhaInterface e MinhaClasse não compartilham informações por estarem no mesmo arquivo.

Você leu isso amigo? Se leu, vai entender porque o erro ocorre :slight_smile:
Abraços.

J

Tenta assim:

int x = MinhaInterface.var;

Ai compila :wink:

ECO2004

Agradeço a todos pela ajuda!

O que aconteceu foi que, quando eu iniciava uma linha com

MinhaInterface. (esperando aparecer var como opção de acesso), o compilador via o resultado disso como um retorno de valor, apenas. Como “MinhaInterface.” não estava dentro de um System.out.print() ou havia uma variável recebendo o retorno, gerava um “No default proposal”.

Daí surgiram as dúvidas sobre variáveis dentro de uma interface!

Vlw mesmo pela luz!

gRoOve

nel:
ECO2004:
gRoOve:
Com relação a variável da Interface, ela só poderá ser acessada se um classe implementar a interface, correto?
Não entendi pq não e possível acessar direto a varíavel static pelo nome da Interface, é uma regra específica para Interfaces?

Acredito que sim, na sua primeira pergunta.
Na segunda, não dá acesso à ‘var’ usando acesso estático direto (Interface.var).

Quem lhe disse que não? Você e o gRoOve estão enganados.
Toda e qualquer variavél declarada dentro de uma interface é public, static e final, ou seja, imutavél.

Isso:

public interface IExemplo { public static final String EXEMPLO = "Teste"; }

É igual a isto:

public interface IExemplo { String EXEMPLO = "Teste"; }

Assim como também todo método em uma interface é publico e abstrato.
Portanto, para esse exemplo, é perfeitamente possível acessar a variavel EXEMPLO fazendo simplesmente IExemplo.EXEMPLO.

Entenderam? :slight_smile:
Abraços.


Nel, estou enganado com relação a qual afirmação? Falei que não entendia pq a variável NÃO podia ser acessada…
Compilei o código e rodou normalmente aqui.

ECO2004

gRoOve:
nel:
ECO2004:
gRoOve:
Com relação a variável da Interface, ela só poderá ser acessada se um classe implementar a interface, correto?
Não entendi pq não e possível acessar direto a varíavel static pelo nome da Interface, é uma regra específica para Interfaces?

Acredito que sim, na sua primeira pergunta.
Na segunda, não dá acesso à ‘var’ usando acesso estático direto (Interface.var).

Quem lhe disse que não? Você e o gRoOve estão enganados.
Toda e qualquer variavél declarada dentro de uma interface é public, static e final, ou seja, imutavél.

Isso:

public interface IExemplo { public static final String EXEMPLO = "Teste"; }

É igual a isto:

public interface IExemplo { String EXEMPLO = "Teste"; }

Assim como também todo método em uma interface é publico e abstrato.
Portanto, para esse exemplo, é perfeitamente possível acessar a variavel EXEMPLO fazendo simplesmente IExemplo.EXEMPLO.

Entenderam? :slight_smile:
Abraços.


Nel, estou enganado com relação a qual afirmação? Falei que não entendia pq a variável NÃO podia ser acessada…
Compilei o código e rodou normalmente aqui.

IExemplo.EXEMPLO somente irá funcionar se sor parâmetro de algum método ou se tiver alguma var recebendo o seu valor. Caso contrário, não.

nel

Cara,

cuide com o que afirma (usando somente), principalmente se não tem certeza sobre o que fala.
Uma variavél de uma interface quando é acessada, precisa existir uma operação de atribuição e/ou manipulação sobre ela.

Caso contrário, terás em tempo de compilação algo como “AssignmentOperator Expression”.
Você pode utiliza-la em um IF, Switch, passagem de parametro, enfim, manipular.

O que não pode é atribuir um novo valor e/ou acessar a variavél sem executar nenhum tipo de manipulação e/ou atribuição sobre ela.
Abraços.

ECO2004

nel:
Cara,

cuide com o que afirma (usando somente), principalmente se não tem certeza sobre o que fala.
Uma variavél de uma interface quando é acessada, precisa existir uma operação de atribuição e/ou manipulação sobre ela.

Caso contrário, terás em tempo de compilação algo como “AssignmentOperator Expression”.
Você pode utiliza-la em um IF, Switch, passagem de parametro, enfim, manipular.

O que não pode é atribuir um novo valor e/ou acessar a variavél sem executar nenhum tipo de manipulação e/ou atribuição sobre ela.
Abraços.

Ok!

WellingtonRamos

javablue:
Tenta assim:

Ai compila :wink:


Com certeza :thumbup:

Apenas uma observação:
Essa variável é acessada apenas como leitura. Não será possível alterar seu conteúdo (como já foi citado, é imutável). Ou seja:

Criado 7 de julho de 2011
Ultima resposta 8 de jul. de 2011
Respostas 19
Participantes 6