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

7 respostas
A

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

7 Respostas

A

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

Acabei esquecendo; qual a diferença entre sobrecarga e sobrescrita.

AndreLuisOnLine

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;

fesaab

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.

Dessas variáveis o que pode ou não pode usar.
instanceOf 3_$int $float ?int !byte While

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

}
S

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

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  problemas)

3_$int -  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 -  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  problemas)
E

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.

A

O Pessoal, valeu a ajuda…

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

Criado 16 de outubro de 2012
Ultima resposta 17 de out. de 2012
Respostas 7
Participantes 5