abstract class A {
  A(this.property4, this.property5, this.property6);
  covariant late int property6;
  late int? property5;
  late int property4;
}

abstract class B1 {
  B1(this.property4, this.property5, this.property6);
  late final int? property6;
  late final int property4;
  late final int property5;
}

abstract class B2 implements B1 {
  void set property4(int i);
  void set property5(int? i);
  void set property6(int i);
}

abstract class C1 {
  C1(this.property4, this.property5, this.property6);
  late int property4;
  late int property5;
  late int property6;
}

abstract class C2 implements C1 {
  int? get property6;
  int get property4;
  int get property5;
}

main() {}
