;(load "java-syntax") ;(load "java-support") ;(load "java-eval") (if (file-readable? "/mit/6.001") (load "/mit/6.001/lib/ps9/java-working") ; java-working path on athena (load (u6001-dir "psets/ps9/java-wrk"))) ; java-working path in lab and pc ;(load "java-working") ; Supplied by 6.001 staff ;(load "java-testing") ; You should do this each time you restart scheme ;be sure to reload java-testing whenever you restart scheme...it ;should contain your changes to the system (define SuperClass '(class SuperClass (method void baz () (block (print "SuperClass method called") (newline))))) (define SubClass '(class SubClass (extends SuperClass) (method void baz () (block (print "SubClass method called") (newline))) (method void Test2 ((SuperClass x)) (block (print "Superclass arg.") (newline))) (method void Test2 ((SubClass x)) (block (print "Subclass arg.") (newline))))) (define Main '(class main (method (static) void foo ((SuperClass bar)) (block (print "Called foo (SuperClass)") (newline))) (method (static) void foo ((SubClass bar)) (block (print "Called foo (SubClass)") (newline))) (method (public static) void main () (variables SubClass ((= sub (new SubClass))) (variables SuperClass ((= sup (new SuperClass)) (= subAsSup sub)) (block (print "Testing static vs. dynamic lookup on method arg.") (newline) (print "foo(SubClass): ") (call foo sub) (print "foo (SuperClass): ") (call foo sup) (print "foo (SubClass masquerading as Superclass)") (call foo subAsSup) (newline) (print "Testing static vs. dyamic lookup on method owner") (newline) (print "SubClass.baz(): ") (call (dot sub baz)) (print "SuperClass.baz(): ") (call (dot sup baz)) (print "(SubClass masquerading as SuperClass).baz(): ") (call (dot subAsSup baz)) (print "Testing static vs dynamic lookup on arg type") (newline) (print "Test2(sup)") (call (dot sub Test2) sup) (print "Test2(sub)") (call (dot sub Test2) sub) (print "Test2(subAsSup)") (call (dot sub Test2) subAsSup))))))) (define (method-test) (run-exprs (list SuperClass SubClass Main '(global Main (= m (new main))) '(call (dot m main)))))