Um método estático pode acessar membros não-estáticos da classe?
Um método não estático pode acessar membros estáticos da classe?
Uma subclasse pode sobrecarregar os métodos da superclasse?
[quote=Armando Pereira]Um método estático pode acessar membros não-estáticos da classe?
Um método não estático pode acessar membros estáticos da classe?
Uma subclasse pode sobrecarregar os métodos da superclasse?
Dessas variáveis o que pode ou não pode usar.
instanceOf 3_$int $float ?int !byte While
Agradeço a ajuda
[/quote]
Acabei esquecendo; qual a diferença entre sobrecarga e sobrescrita.
Se é um método/membro não-estático precisa de uma instancia da classe.
Caso seja estático pode ser acessado diretamente com NomeDaClasse.nomeDoMetodo() / atributo;
Não.
Um método estático pertence a uma classe e membros não estáticos pertencem a instâncias da classe (objeto).
Isso acontece pq os membros estáticos e não estáticos ficam em lugares diferentes na memória, os estáticos ficam na heap e os não estáticos (cada objeto) ficam na pilha (stack).
Sim.
O jeito correto é usando NomeDaClasse.metodoEstatico(), mas se existe um método estático (e acessível) na sua classe atual (ou na hierarquia de classes) o compilador deixa você chamar apenas com metodoEstatico() que depois ele converte para o bytecode correspondente.
Se ele estiver acessível (protected ou public) sim.
[quote]Dessas variáveis o que pode ou não pode usar.
instanceOf 3_$int $float ?int !byte While[/quote]
Não me lembro de cabeça e estou em uma máquina sem jdk, mas talvez apenas While seja permitida…
Isso é bem fácil de conferir… Só declarar essas variáveis e ver se dá erro de compilação… hehehe
OBS: variáveis com esses nomes complicados e não intuitivos são desaconselháveis.
Sobrecarga:
public void metodoSobrecarregado() {
}
public void metodoSobrecarregado(int numero) {
}
public void metodoSobrecarregado(String nome) {
}
public void metodoSobrecarregado(int numero, String nome) {
}
Sobrescrita:
public class ClasseA {
public void metodoSobrescrito() {
}
}
public class ClasseB extends ClasseA {
@Override
public void metodoSobrescrito() {
}
}
instanceOf - 1, 2, e 3 OK (existe a palavra reservada instanceof, com a letra “o” minúscula, portanto não há problemas)
3_$int - Já tem problema com 1 porque começa com dígito
$float - 1 está OK (começa com $), 2 OK, e 3 também está OK porque a palavra reservada é “float”, não “$float”
?int - Já tem problema com 1 porque ? não é letra, _ ou $
!byte - Já tem problema com 1 porque ! não é letra, _ ou $
While - 1, 2, e 3 OK (existe a palavra reservada while, com a letra “w” minúscula, portanto não há problemas)
Não recomendo usar $ em nomes de variáveis, classes, métodos etc.
É que o Java já reserva o $ para criar nomes de classes internas e anônimas.
Por exemplo, a classe anônima que implementa ActionListener que aparece no código abaixo:
class Teste {
....
jbutton.addActionListener (new ActionListener() {
public void actionPerformed(ActionEvent e) {
...
...
é batizada internamente pelo Java como “Teste$1” se essa for a primeira classe anônima que aparece no fonte da classe Teste, “Teste$2” se for a segunda classe anônima, e assim por diante.