Exercises 07
Exercise 1
Run javac on the following program:
class A { } class B extends A { void foo() { } } class Test { public static void main(String[] args) { B[] b = new B[5]; A[] a; a = b; System.out.println("Hello,"); a[0] = new A(); System.out.println("world!"); b[0].foo(); } }
Explain what happened.
Then, run
java -cp . Test
Explain what happened.
Exercise 2
If the following programs type-check according to the rules given in the course, give the corresponding type derivation tree, otherwise give a partial tree that shows where it doesn't work
a)
class A { } class B extends A { } class Test { val array: Array[A] = new Array[B](2) array(0) = new A array(0) = new B }
b)
class Test { class A {} class B extends A {} class C extends B {} def func(x: B=>B): A val y: A=>C val z = func(y) }