// @dart = 2.6
class Interface1 {
  void interfaceMethod1() {}
}

class Interface2 {
  void interfaceMethod2() {}
  var interfaceMethod1;
}

class Interface3 {
  void interfaceMethod3() {}
}

abstract class A implements Interface1, Interface2, Interface3 {
  aMethod() {}
  abstractMethod();
  void set property1(_);
  void set property2(_);
  void set property3(_);
}

abstract class B extends A {
  final property1 = null;
  aMethod() {}
  bMethod() {}
}

class MyClass extends B {
  var property2;
  aaMethod() {}
  aMethod() {}
  bMethod() {}
  cMethod() {}
}

class MyMock1 extends B {
  noSuchMethod(_) => null;
}

class MyMock2 extends MyMock1 {
  noSuchMethod(_);
}

class MyMock3 extends B {
  noSuchMethod(_);
}

class C {
  void interfaceMethod1(_) {}
}

abstract class D extends C implements Interface2 {}

class E {
  void set interfaceMethod1(_) {}
}

abstract class F extends E implements Interface1 {}

class Foo {
  void foo() {}
}

class G {
  Object get foo => null;
}

abstract class H extends G implements Foo {}

class Bar {
  Object get foo => null;
}

class I {
  Object foo() {}
}

abstract class J extends I implements Bar {}

main() {}
