public class Main {
    static abstract class Context {
        abstract String hey();
    }

    interface Listener {
        void sup(String s);
    }

    static class MainActivity extends Context implements Listener {
        void hi() {
            method(this);
        }

        <T extends Context & Listener> void method(T t) {
            t.sup(t.hey());
        }

        @Override
        String hey() {
            return "hey.";
        }

        @Override
        public void sup(String s) {
            System.out.println(s);
        }
    }


    public static void main(String[] args) {
        new MainActivity().hi();
    }
}