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] -------------------------------------------------------------------------