library test /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;

class B<T extends core::Object? = dynamic> extends core::Object {
  covariant-by-class field self::B::T% x = throw "";
  covariant-by-class field self::B::T% y = throw "";
  synthetic constructor •() → self::B<self::B::T%>
    : super core::Object::•()
    ;
}
abstract class C<T extends core::Object? = dynamic> extends core::Object implements self::B<core::num> {
  covariant-by-class field core::num x = throw "";
  synthetic constructor •() → self::C<self::C::T%>
    : super core::Object::•()
    ;
  abstract get y() → core::num;
  abstract set y(covariant-by-class core::num value) → void;
}
abstract class D<T extends core::Object? = dynamic> extends core::Object implements self::B<self::D::T%> {
  covariant-by-class field self::D::T% x = throw "";
  synthetic constructor •() → self::D<self::D::T%>
    : super core::Object::•()
    ;
  abstract get y() → self::D::T%;
  abstract set y(covariant-by-class self::D::T% value) → void;
}
static method main() → dynamic {}
