Decompile Scala code: why there are two overridden methods in the derived class?
class A
{
    private var str: String = "A"
    val x: A = this
    override def toString(): String = str
    def m1(other: AnyRef): AnyRef = {
      println("This is A.m1(AnyRef)")
      other
    }
}
class B extends A {
    private var str: String = "B"
    var z: Int = 0
    override val x: B = this
    override def m1(other: AnyRef): B = {
      println("This is B.m1(AnyRef)")
      this
    }
}
class B of the above code is decompiled as:
public class test$B extends test$A {
  private java.lang.String str;
  private int z;
  private final test$B x;
  private java.lang.String str();
  private void str_$eq(java.lang.String);
  public int z();
  public void z_$eq(int);
  public test$B x();
  public test$B m1(java.lang.Object);
  public java.lang.Object m1(java.lang.Object);
  public test$A x();
  public test$B();
}
I cannot understand why there are two "versions" of method m1 in the decompiled code.
From my understanding, B.m1 just overrides A.m1 and public java.lang.Object m1(java.lang.Object) belongs to A and should not
be in class B. 
 
     
    