Eu gostei dessa pergunta.
A principio, nao consegui achar nenhuma resposta satisfatoria, parece nao
existir nenhum motivo especial pelo qual Object nao poderia ser abstract. 
Fiz ateh uma pesquisa no codigo fonte do Java (J2SE 1.4.1), e Objects sao
instanciados em apenas 48 dos 3889 arquivos. E em muitos desses casos, seria
muito facil usar algum outro artificio para chegar ao mesmo resultado (ou seja,
o desenvolvedor instanciou Object simplesmente porque podia, se nao fosse
possivel, haveriam varias outras opcoes).

Ai passei a pensar no que significa declarar uma classe abstract, e porque essa
decisao eh tomada. E acho que encontrei o motivo. 

O motivo fundamental para que uma classe seja declarada abstract eh porque ela
eh incompleta, ou seja, o desenvolvedor nao sabe, no momento da implementacao,
todos os requisitos necessaries, e eh forcado a declarar abstract para que outro
desenvolvedor, com mais informacoes, complete a classe. Bom, Object certamente
nao eh uma classe incompleta, uma instancia de Object responde coerentemente a
todas as mensagens (methods), logo, nao faz sentido declarar Object abstract.
Declarar uma classe abstract apenas para impedir que seja instanciada eh um
exemplo de design ruim.


-----------
 
 From: "Paulo Silveira" <[EMAIL PROTECTED]>
 Reply-To: [EMAIL PROTECTED]
 To: [EMAIL PROTECTED]
 Subject: [java-list] java.lang.Object, porque n�o abstract?
 Date: Wed,  2 Oct 2002 17:34:21 -0300
 
 Oi pessoal!
 
 Uma vez alguem me perguntou, e eu n�o soube dar um motivo 100%:
 
 "Porque a java.lang.Object n�o � abstract"
 
 Ela poderia perfeitamente ser abstract, j� que n�o � preciso ter m�todos
abstratos para a classe ser abstrata.
 
 Voc� poderia ainda se referenciar a Objects, criar array de Objects e tudo 
 mais.
 
 A �nica coisa que voc� n�o poderia fazer, seria instanciar Objects. A �nica 
 utilidade de instanciar Objects, a meu ver, � utilizar como objetos de tag, ou
como mutex (declara uns Objects 
 est�ticos e da syncrhinized neles!). Mas pra isso basta voc� criar uma inner
classe bem inutil, s� pros mutexes e 
 coisas do g�nero.
 
 Existe alguma coisa que faria o java.lang.Object precisar ser concreta? Ou foi
apenas uma decis�o de implementa��o?
 
 ======================
 Paulo Eduardo Azevedo Silveira
 Grupo de Usu�rios Java

------------------------------ 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
historico: http://www.mail-archive.com/java-list%40soujava.org.br
para sair da lista: envie email para [EMAIL PROTECTED]
-------------------------------------------------------------------------

Responder a