Я имею в виду, что метод foo принимает CharSequence (или его подкласс или реализующий класс) и в качестве параметра и возвращает тип тот же в качестве возвращаемого значения.
Например, вы можете вызватьметод, подобный этому
CharSequence s = ...
CharSequence result = foo(s);
или
String s = ...
String result = foo(s);
или
StringBuffer s = ...
StringBuffer result = foo(s);
Однако он не позволяет использовать несовпадающие типы возвращаемых данных и параметров.Это не нормально:
String s = ...
StringBuffer result = foo(s);
или
StringBuffer s = ...
String result = foo(s);