aboutsummaryrefslogtreecommitdiff
path: root/tests/untried/pos/gosh.scala
diff options
context:
space:
mode:
Diffstat (limited to 'tests/untried/pos/gosh.scala')
-rw-r--r--tests/untried/pos/gosh.scala44
1 files changed, 44 insertions, 0 deletions
diff --git a/tests/untried/pos/gosh.scala b/tests/untried/pos/gosh.scala
new file mode 100644
index 000000000..81af14016
--- /dev/null
+++ b/tests/untried/pos/gosh.scala
@@ -0,0 +1,44 @@
+object ShapeTest extends App {
+
+ class Point(x: Int, y: Int) {
+ override def toString() = "[" + x + "," + y + "]"
+ }
+
+ abstract class Shape {
+ def draw(): Unit
+ }
+
+ class Line(s: Point, e: Point) extends Shape {
+ def draw(): Unit = { Console.println("draw line " + s + "," + e) }
+ }
+
+ abstract class Foo {
+ type T <: Object
+
+ def show(o: T): Unit
+ def print(): Unit = { Console.println("in Foo") }
+ }
+
+ abstract class ShapeFoo extends Foo {
+ type T <: Shape
+ def show(o: T): Unit = { o.draw() }
+ override def print(): Unit = { Console.println("in ShapeFoo") }
+ }
+
+ class LineFoo extends ShapeFoo {
+ type T = Line
+ override def print(): Unit = { Console.println("in LineFoo") }
+ }
+
+ val p1 = new Point(1,4)
+ val p2 = new Point(12, 28)
+
+ val l1 = new Line(p1, p2)
+
+
+ val l = new ShapeFoo { // ** //
+ type T = Line // ** //
+ override def print(): Unit = { Console.println("in LineFoo") } // ** //
+ }
+ l.show(l1) // ** //
+}