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