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