Solution (source code)

= Solution

\b[The output is `1`, with no newline.] The `Any` in `class B[Any]` and `class C[Any]` is a <type parameter> name that shadows the standard type `scala.Any` inside those class bodies. Renaming it to `T` preserves the program's meaning. Thus `new B[Int]` has an inherited `m(Double)` and its own `m(Int)`; `obj1.m(1)` selects the latter and prints `1`. The call with `2.3` can only use the inherited `m(Double)`, which computes a sum without printing.

For `new C[Any]`, the supplied <type argument> is the standard `scala.Any`, so the overloads are `m(Double)` and `m(scala.Any)`. The more-specific `Double` alternative accepts `4` by <numeric widening>, and accepts `5.6` directly. Both return sums without printing. A computed result is not automatically screen output. This reasoning uses the <Scala> 2.11 overload conventions of Question 5(a); <type erasure> does not turn either class's generic-argument overload into an <method overriding> of `m(Double)`.