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

class Base extends core::Object {
  field core::int intProp;
  field core::int? intProp2;
  field core::num numProp;
  field core::num? numProp2;
  field core::double doubleProp;
  field core::double? doubleProp2;
  synthetic constructor •() → self::Base
    ;
}
class Test1 extends self::Base {
  synthetic constructor •() → self::Test1
    ;
  method test() → void
    ;
}
class Test2 extends self::Base {
  synthetic constructor •() → self::Test2
    ;
  method test() → void
    ;
}
class Test3 extends self::Base {
  synthetic constructor •() → self::Test3
    ;
  method test3() → void
    ;
}
static method getInt() → core::int
  ;
static method getNum() → core::num
  ;
static method getDouble() → core::double
  ;
static method main() → dynamic
  ;
