public abstract class CharBuffer implements CharSequence { public final int length() { return 0; } public final char charAt(int index) { return 'K'; } // The key problem here is that `get` has the same signature as kotlin.CharSequence.get but completely different semantics public abstract char get(int index); public abstract CharBuffer subSequence(int start, int end); public static CharBuffer impl() { return new CharBuffer() { @Override public char get(int index) { return 'O'; } @Override public CharBuffer subSequence(int start, int end) { return null; } }; } }