Правильно ли я понимаю, что MyClass implements AClass
будет означать, что MyClass
должен обеспечивать (или наследовать) реализации для всех открытых методов, которые есть у AClass
? То есть каждый класс неявно определяет интерфейс, состоящий из его открытых методов?
Если это так, то проблема, с которой я сталкиваюсь, заключается в том, что интерфейсы действительно сильно отличаются от классов, и эти два не следует смешивать таким образом. Интерфейсы определяют контракт, классы - реализацию. Следствие этого: функциональность классов может быть расширена относительно свободно, но не так, как интерфейс с существующими реализациями.
Таким образом, у вас есть очень конкретная причина, по которой ваше предложение будет неверным: вы никогда не сможете добавить какой-либо открытый метод к любому классу, не рискуя нарушить некоторый код, implements
этого класса.
А с другой стороны, какие проблемы это решит? Дублирование кода, когда у вас есть интерфейс с одной реализацией? Как насчет решения этого, не делая этого? IMO - это обычно что-то, что люди делают TDD догматично, используя устаревшие фреймворки для насмешек, которые не способны насмехаться над конкретными классами.