Algumas dúvidas sobre classes, métodos, sobrecarga, etc;

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=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() {
    }

}

Na verdade, uma subclasse pode sobrecarregar os metodos da superclasse independente do modificador de visibilidade.

Exemplo:

class A extends B{
	public void metodo(String texto) {
		
	}
}

class B {
	private void metodo() {
		
	}
}

A definição de um nome de variável é:

  1. Deve começar por uma letra, ou _, ou $
  2. Depois, pode ter letras, dígitos, _ ou $
  3. Não pode bater com alguma palavra reservada.

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.

O Pessoal, valeu a ajuda…

Tá fechada a questão. Obrigado mesmo. Que Deus aumente o conhecimento e entendimento de vocês… :slight_smile: