It took me almost four days to wrap my head around the way these work (someone pointed out delegated properties earlier, which was a solution to another thing). I don't know if it's just literally done differently in a system's language or if they just simply provide some compiler magic. But in Rust/Swift I recall implementing an interface and being able to blindly use any object of CurrentType as ImplementedType (e.g. we have to manually construct each delegate in Kotlin). Anyway, got it figured out. Thanks!