我可以在scala中用具体类型重写类型参数化方法吗?

我可以在scala中用具体类型重写类型参数化方法吗?,scala,polymorphism,traits,Scala,Polymorphism,Traits,我想通过为类型参数指定一个具体类型来覆盖一个类型参数化方法,类似下面的代码 trait A { def amethod[T](x: T): T } trait B extends A { def amethod(x: String): String = x ++ x } 然而,编译器给出的amethod不覆盖任何内容。我不能将[String]放在trait B的amethod之后,因为从语法上讲,它表示名为String的类型参数,而不是java.lang.String类型。我想知道我是

我想通过为类型参数指定一个具体类型来覆盖一个类型参数化方法,类似下面的代码

trait A {
  def amethod[T](x: T): T
}
trait B extends A {
  def amethod(x: String): String = x ++ x
}
然而,编译器给出的
amethod不覆盖任何内容
。我不能将
[String]
放在trait B的
amethod
之后,因为从语法上讲,它表示名为String的类型参数,而不是java.lang.String类型。我想知道我是否能做这样的事情,以及如何做这样的事情


非常感谢

正如trait
A
中定义的那样,amethod是一种泛型方法,这意味着每个调用都可以应用于泛型参数

在trait
B
中,您试图说的是更改表示通用性的范围,将其从调用站点移动到类定义本身。这是不可能的

正如注释中所建议的,如果要在类定义中表示通用性,则类型参数应应用于类,而不是方法:

 trait A[T] {
   def amethod(x: T): T
 }

 trait B extends A[String] {
   override def amethod(x: String): String = x ++ x
 }

作为注释“<代码> b>代码>与<代码> A/<代码>的合同的解释,请考虑此代码:

def foo(): A = new B {} // legal because B extends A
def bar = foo().amethod[Int](0)

该怎么办?如果你想通过查看
foo
的主体来拒绝它,那么想象一下它是一个抽象方法,而某个类恰好以这种方式实现了它。

你是否可以控制trait
A
?如果是这样,您可以将
T
作为类型参数,并将
B
作为
a[String]
的子类型
B
违反了与
A
的合同。这对我来说非常有效。。你能解释一下问题是什么吗<性状A{def-amethod[T](x:T):T};特征B扩展了{def-amethod[String](x:String)=x};类C扩展了B{};val c=新的c();c、 爱米索德(“你好”);res5:String=Hello@rogue one尝试呼叫
c.amethod(1)