// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// @dart = 2.9
import 'package:expect/expect.dart';

class Implementation {
  dynamic method(int x) {}
}

abstract class Interface<T> {
  dynamic method(T x);
}

class Subclass extends Implementation implements Interface<int> {}

typedef dynamic TakeNum(num x);

main() {
  Subclass subclass = new Subclass();
  Interface<int> intInterface = subclass;
  Interface<num> numInterface = intInterface;
  TakeNum f = numInterface.method;
  Expect.throws(() => f(2.5));
  dynamic f2 = f;
  Expect.throws(() => f2(2.5));
}
