>>9
Because unlike a "true" OO language, Java can be made to run in reasonable amounts of time. Compilers can't optimize "true" OO because they have no clue what the code will be doing until runtime. So you lose all the nice static typechecks that make Java code fast and (reasonably) safe, and allow you to do automated refactorings through shiny IDEs like Eclipse.
Yeah, the fact that its not "true" OO is annoying, but the gains from having a language that a computer can understand are immense. Most of the people who complain about Java OO are those who haven't worked on large projects - where having the computer understand your code is incredibly important.