Consider abstract class `Element` here is a super class for many subclasses like `ArrayElement` each have their own helper methods but with common `param` property

I need to call helper method `printValue` with `that` object. `check` method receive `ArrayElement` object in run time. Hence at run time, I hope there won't be any problem.

But, this code is not compiling, `that` object looking for `printValue` method in abstact class `Element` at compile time. It forces me to declare `printValue` in `Element`

All the helper methods in `ArrayElement` need to be declared in super abstract class `Element`?

```
object ObjectTest {
    def main(args: Array[String]): Unit = {
        val x = new ArrayElement(999).check(new ArrayElement(333))
    }
}
abstract class Element {
    val param : Int
    def printValue : String  // commenting this line throws error below
}
class ArrayElement(override val param : Int) extends Element {
    def check(that: Element)  = {
       this.printValue
       println(that.param)
       println(that.printValue)  // throws error -- **value printValue is not a member of org.mytest.challenges.Element**
    }
    def printValue = "value:" + param
}

```