@Inheritable Point2D = Class {::[<: Self]x = Int; ::[<: Self]y = Int} Point2D. norm self = self::x**2 + self::y**2 #OK Point3D = Inherit Point2D, Additional := {z = Int} Point3D. @Override norm self = self::x**2 + self::y**2 + self::z**2 #OK C = Class() C. method point: Point2D = point::x # ERR p = Point3D.new {x = 1; y = 2; z = 3} p::x # ERR p.x # ERR p::z # ERR rec = { ::[f] x = 1 } f x = rec::x + x # OK g x = rec::x + x # ERR unpack {x; y}: {.x = Int; .y = Int} = x + y private = { x = 1; y = 2 } public = { .x = 1; .y = 2 } _ = unpack public # OK _ = unpack private # ERR unpack2 {x; y} = x + y _ = unpack2 public # OK _ = unpack2 private # ERR