Scala: Substituindo Métodos Java Genéricos II

No Scala, preciso substituir o seguinte, dado, classes e métodos Java:

public abstract class AbstractJava<T> {
    protected abstract T test(Class<? extends T> clazz);
}

public class ConcreteJava extends AbstractJava<Object> {
    @Override
    protected Object test(Class<?> clazz) {
        return null;
    }
}

// Scala
class ConcreteScala extends ConcreteJava {
    protected override def test(clazz: Class[_ <: AnyRef]): AnyRef =
        super.test(clazz)
}

Estou recebendo o erro de compilação:

error: ambiguous reference to overloaded definition,

both method test in class ConcreteJava of type 
(clazz: java.lang.Class[_])java.lang.Object

and method test in class AbstractJava of type 
(clazz: java.lang.Class[_ <: java.lang.Object])java.lang.Object

match argument types (Class[_$1]) and expected result type AnyRef

super.test(clazz)

Eu não esperaria que o compilador Scala se referisse a umabstract em umsuper ligar. Além disso, eu esperaria que ele se referisse ao direct super classe primeiro.

Como posso fazer a classe Scala compilar?

Obrigado

Editar

Quando deixar osuper.test(clazz) call, haverá a mensagem de erro:

error: name clash between defined and inherited member:

method test:(clazz: Class[_ <: AnyRef])AnyRef and
method test:(clazz: java.lang.Class[_])java.lang.Object in class ConcreteJava

have same type after erasure: (clazz: java.lang.Class)java.lang.Object

protected override def test(clazz: Class[_ <: AnyRef]): AnyRef = null

Bem,clar estes são os mesmos tipos (ou variantes) ...! - Então, há algo errado com a herança Scala / Java ...

Graças a michid, há uma solução preliminar:

class ConcreteScala3 {
  this: ConcreteJava =>
  protected override def test(clazz: Class[_ <: AnyRef]): AnyRef = {
    this.foo() // method of ConcreteJava
    null
  }
}

embora não possamos fazersuper chamadas daqui.

s respostas ainda são bem-vinda

questionAnswers(2)

yourAnswerToTheQuestion