Closed
Description
Compiler version
3.0.0
Minimized code
➜ ~ scala
scala> class A { def apply(xs: Int*) = 42 }
// defined class A
scala> class B extends A { def apply(xs: Seq[Int]) = 42 }
1 |class B extends A { def apply(xs: Seq[Int]) = 42 }
| ^
| error overriding method apply in class A of type (xs: Seq[Int]): Int;
| method apply of type (xs: Seq[Int]): Int needs `override` modifier
scala> class B extends A { def apply(xs: Seq[Int]) = "42" }
1 |class B extends A { def apply(xs: Seq[Int]) = "42" }
| ^
| error overriding method apply in class A of type (xs: Seq[Int]): Int;
| method apply of type (xs: Seq[Int]): String needs `override` modifier
scala> class B extends A { override def apply(xs: Seq[Int]) = 17 }
// defined class B
scala> B()(42)
1 |B()(42)
| ^^
| Found: (42 : Int)
| Required: Seq[Int]
scala> (B(): A)(42)
val res0: Int = 17
Output
// TODO add output here
Expectation
Welcome to Scala 2.13.6 (OpenJDK 64-Bit Server VM, Java 16.0.1).
Type in expressions for evaluation. Or try :help.
scala> class A { def apply(xs: Int*) = 42 }
class A
scala> class B extends A { def apply(xs: Seq[Int]) = 42 }
^
error: name clash between defined and inherited member:
def apply(xs: Int*): Int in class A and
def apply(xs: Seq[Int]): Int at line 1
have same type after erasure: (xs: Seq): Int
scala>