Olah lista,
Como curiosidade, essa discussao eh ateh interessante...
Na verdade, como o Rogerio jah havia comentado anteriormente, o q
acontece eh q existe diferenca entre "palavra reservada" e "identificador".
O compilador soh indica um erro quando uma palavra reservada eh utilizada
como nome de identificador. Quando existem nomes de identificadores iguais
para referencias diferentes, o compilador resolve isso pelo escopo.
O nome desse conceito, nao lembro direito, mas acho q eh "shadowing".
Isso permite q o codigo abaixo seja valido, e comumente utilizado:
class X {
private int a;
public X(int a) {
this.a = a;
}
}
Observe q existem 2 variavies diferentes, mas referenciadas pelo mesmo
nome. Acontece q a variavel mais "interna" ao escopo eh sempre a primeira a
ser referenciada, porque ela faz "sombra" ("shadow") na outra. Observem q
para refenciar o atributo "a", foi necessario usar "this.a".
Da mesma forma, vc pode fazer:
Bar Object = new Bar();
No entanto, boas praticas de programacao em java, aconselham a usar
nomes de classe com inicial em maiuscula e nomes de instancias com inicial
em minuscula... assim:
Bar object = new Bar();
Isso jah ajudaria a diferenciar a Classe "Object" da instancia "object".
Ainda assim pode ser confuso do ponto de vista "humano". E aih, eh como o
Sven disse... use nomes mais significativos e diferentes dos utilizados
pelas classes da API do java, para evitar dores de cabeca na hora de debugar
codigo...
[]s
Edson
---
Edson Tirelli
System Analyst
Microsoft Certified Professional
Sun Certified Programmer for Java 2 Platform
try Automatos - The Automatic MSP
@ www.automatos.com
-----Mensagem original-----
De: Roberto Tatemoto [mailto:[EMAIL PROTECTED]]
Enviada em: sexta-feira, 8 de junho de 2001 11:32
Para: [EMAIL PROTECTED]
Assunto: Re: [java-list] Estranho que isso compila
Isso também compila. Nos testes que eu fiz, qualquer nome de classe pode se
tornar nome de variável. Isso não estaria dentro do conceito de
encapsulamento?
----------------------------------------------------------------------------
------
public class Foo {
public Foo() {
Bar Integer = new Bar();
System.out.println(Integer.parseInt());
}
public static void main(String[] args) {
Foo foo1 = new Foo();
}
}
class Bar {
public Bar() {}
public String parseInt() {
return "Helloowwzz... Que loucura !!!";
}
}
----------------------------------------------------------------------------
-------------------------------
Roberto Tatemoto
Na minha opinião isso não deveria compilar ja que Object é uma das classes
base da Java (Extensão na java.lang). Assim não teria muito diferença de:
Bar Object = new Bar();
ou
String String = new String();
------------------------------ LISTA SOUJAVA ----------------------------
http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP
dúvidas mais comuns: http://www.soujava.org.br/faq.htm
regras da lista: http://www.soujava.org.br/regras.htm
para sair da lista: envie email para [EMAIL PROTECTED]
-------------------------------------------------------------------------