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?
Não existe instância de interface. Existe uma instância da classe que a implementou.
Por exemplo:
[code]
public interface Funcionario {
public double calculaSalario();
}
public Gerente implements Funcionario{
public double calculaSalario(){
//implementação aqui
}
} [/code]
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.
[quote=javablue]Não existe instância de interface. Existe uma instância da classe que a implementou.
Por exemplo:
[code]
public interface Funcionario {
public double calculaSalario();
}
public Gerente implements Funcionario{
public double calculaSalario(){
//implementação aqui
}
} [/code]
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.[/quote]
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…
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);
}
}
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?
[quote=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?[/quote]
Acredito que sim, na sua primeira pergunta.
Na segunda, não dá acesso à ‘var’ usando acesso estático direto (Interface.var).
[quote=ECO2004][quote=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?[/quote]
Acredito que sim, na sua primeira pergunta.
Na segunda, não dá acesso à ‘var’ usando acesso estático direto (Interface.var).[/quote]
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.
[quote=nel][quote=ECO2004][quote=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?[/quote]
Acredito que sim, na sua primeira pergunta.
Na segunda, não dá acesso à ‘var’ usando acesso estático direto (Interface.var).[/quote]
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?
Abraços.[/quote]
Então tá, amigo. Conversa com o Eclipse…
Já compilou esse código?
[quote=ECO2004][quote=nel][quote=ECO2004][quote=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?[/quote]
Acredito que sim, na sua primeira pergunta.
Na segunda, não dá acesso à ‘var’ usando acesso estático direto (Interface.var).[/quote]
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?
Abraços.[/quote]
Então tá, amigo. Conversa com o Eclipse…
Já compilou esse código?[/quote]
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
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!
[quote=nel][quote=ECO2004][quote=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?[/quote]
Acredito que sim, na sua primeira pergunta.
Na segunda, não dá acesso à ‘var’ usando acesso estático direto (Interface.var).[/quote]
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?
Abraços.[/quote]
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.
[quote=gRoOve][quote=nel][quote=ECO2004][quote=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?[/quote]
Acredito que sim, na sua primeira pergunta.
Na segunda, não dá acesso à ‘var’ usando acesso estático direto (Interface.var).[/quote]
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?
Abraços.[/quote]
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.[/quote]
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.
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.
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.[/quote]