Interfaces
main.w
bring math;
interface Geometry {
  area(): num;
  perim(): num;
}
class Rect impl Geometry {
  width: num;
  height: num;
  new(width: num, height: num) {
    this.width = width;
    this.height = height;
  }
  pub area(): num {
      return this.height * this.width;
  }
  pub perim(): num {
    return 2 * this.height + 2 * this.width;
  }
}
class Circle impl Geometry {
  radius: num;
  new(radius: num) {
    this.radius = radius;
  }
  pub area(): num {
      return math.PI * this.radius * this.radius;
  }
  pub perim(): num {
    return 2 * math.PI * this.radius;
  }
}
let r = new Rect(3, 4);
let c = new Circle(5);
log(r.area());
log(r.perim());
log(c.area());
log(c.perim());
Wing console output
# Run locally with wing console
wing it
12
14
78.53981633974483
31.41592653589793