#-*-c++-*- layerinfo "type" = "core"; layerinfo "majorversion" = 0; class A { function write(string s); } class B extends A { } function A::write(string s) { println "A wrote: " + $s; } function B::write(string s) { println "B wrote: " + $s; } function getA (bool subclass) : A { var A v = new A; if ($subclass) { $v = new B; } return $v; } function main () { var B b = new B; var A a = new A; $a->write("A"); $b->write("B"); $a = $b; $a->write("B from A"); var A fa; $fa = getA(false); $fa->write("should be A"); $fa = getA(true); $fa->write("should be B"); }