First, note that that information was written in 1997. That's very long ago, especially considering how fast things change in the world of computers and programming languages.
I didn't read the whole article in detail, but it looks like they have come up with some hack that involves class loaders, and that the JVM apparently doesn't check for, and from that they conclude that Java is not type-safe. It sounds like a theoretical possibility that doesn't really have a lot to do with how the Java programming language is used in practice by most people. Since this was written in the time of Java version 1.0, this might not even apply anymore to Java 5 or 6.
I wouldn't take that page as a serious flaw or bug in the JVM or Java programming language.
Java is type-safe because the compiler checks the types of variables and expressions in your code, and will give you an error if the types don't match. I wouldn't make it too complicated and worry about some paper from 1997 which is based on some special hack.
It would be interesting to try running their example to see what happens now. The basic thesis of this article seems to be that the JVM will happily treat instances of two classes by the same name, loaded by different class loaders, as being instances of the same class. My understanding is that a Java type is identified by a (ClassLoader, Class) pair, and that two classes loaded by different ClassLoaders are not the same. The ClassLoader semantics were firmed up in Java 1.2, and I expect that this article's propositions were invalid shortly after publication. I'll give it a try when I have a chance.
Java's history with Bell Labs is an interesting one. Everyone will remember Microsoft as trying to weaken, destroy, or take Java. But very few people realize that Bell Labs was taking potshots from the sidelines as well -- most likely because they had a competing technology coming out.