Scala, isInstanceOf, inheritance, getClass, and equals (equality)

I was doing a little Scala programming this morning, and because I hadn't written any code in a while, I managed to forget how isInstanceOf works with inheritance in Scala.

To refresh my memory, I wrote the following example code:

/**
 * The problem with Scala isInstanceOf and inheritance.
 */
object Foo extends App {
  
  class Foo
  class Bar extends Foo
  class Baz extends Bar
  
  val foo = new Foo
  val bar = new Bar
  val baz = new Baz
  
  println("foo.isInstanceOf[Foo]: " + (foo.isInstanceOf[Foo]))  // true
  println("bar.isInstanceOf[Foo]: " + (bar.isInstanceOf[Foo]))  // true
  println("baz.isInstanceOf[Foo]: " + (baz.isInstanceOf[Foo]))  // true
}

As you can see, isInstanceOf says "true" for any comparison with the current class, or any parent classes.

Note: I removed the rest of this article because it was wrong. I'll try to remember to update article when I have more time.

Post new comment

The content of this field is kept private and will not be shown publicly.