Amigos,
bom dia,
todo atributo de uma interface é por defult ?
static final public int a = 2;
colocando o "static final public " explicitamente ou não ?
Obrigado.
Amigos,
bom dia,
todo atributo de uma interface é por defult ?
static final public int a = 2;
colocando o "static final public " explicitamente ou não ?
Obrigado.
bom dia…
cara, quando se trata de interface, implicitamente os atributos dela são publicos e estáticos, ou seja, mesmo se tu não colocar modificador de acesso ou o static, assim o será.
public interface teste {
int a = 2;
}
exato… todo atributo de uma interface eh uma constante (public static e final) quer vc coloque explicitamente os modificadores, quer não.
fique atento às pegadinhas sobre isso… por exemplo:
public interface I {
int a = 1;
int b; // erro de compilação pois eh preciso informar o valor da constante no momento da declaração.
}
public class C implements I {
void metodo() {
a = 5; // erro de compilação pois nao pode mudar o valor da constante;
}
}
po fiquei na duvida rafael… se eu nao usar uma constante e nao declarar nenhum valor para ela… o codigo nao compila como no seu exemplo… vc nao usou b, mais precisar declarar um valor? mesmo que ele n esteja sendo o usado?
Quando um atributo é marcado como final, independente se for em uma interface ou em uma classe, ela deve ser inicializada…
Abraços
oi, LP…
Eu acho que é porque a constante eh public static e final .
Destaquei static e final porque esses modificadores é que tornam necessário que a atribuição seja feita na hora da declaração… por ser static, quando a classe/interface for carregada, já vai ser iniciado algum valor para o atributo… e por ser final, esse valor não poderá ser mais modificado. Assim sendo, não faria sentido vc definir um membro static e final sem atribuir nenhum valor no momento da declaração, pois ele sempre teria seu valor default (no caso do int, ele sempre seria 0 e nunca poderia mudar).
Acho que por isso vc precisa informar o valor que vc deseja no momento da declaração.
O mesmo acontece se vc definir um atributo de classe como final… se o atributo for final, vc tb precisa definir um valor para ele… ou no momento da declaração do atributo ou em todos os construtores da classe. Pois se isso não fosse feito, sempre que criassemos um objeto da classe o atibuto final seria iniciado com um valor default e tb n faria sentido criar um atributo imutavel sem dar um valor pra ele.
outros detalhes de interfaces ai pra vcs
1 - assim como classe, interface não pode ser private nem protected… somente publica e final;
2 - em declarações de interface, modificadores abstract (internamente uma interface é como classe 100% abstrata) e strictfp são aceitos… somente final que não;
3 - métodos de interface são implicitamente publicos e abstract… modificadores final, native, strictfp, syncronized não são aceitos;
4 - atributos de interface são implicitamente public, static e final.
5 - Métodos de interface não podem ser estáticos (static)
Acho q vc quis dizer public e acesso default nao? hehe
Outro detalhe que pode matar um na prova é que dada uma interface e uma classe que a implementa, todos os metodos que estão na classe e que foram definidos na interface devem ser public (pois na sobrescrita nao pode-se diminuir o nível de acesso).
ex.:
interface I {
void metodo();
}
class C implements I {
void metodo() { ... } //Erro de compilação pois method() deve ser public
}
Pra quem está atento é moleza… mas pra qm passa o olho rapido e n ta atento pode perder a questão.
[quote=eltonk]Quando um atributo é marcado como final, independente se for em uma interface ou em uma classe, ela deve ser inicializada…
Abraços :)[/quote]
ehhe destalhes esquecido
Acho q vc quis dizer public e acesso default nao? hehe
[/quote]
isso mesmo, obrigado por corrigir minha desatenção… :roll: :roll: