В Java и .NET структуры, среди прочего, имеющий класса X наследует от Y имеет два преимущества:
экземпляры класс X инкапсулировать значения всех полой Y, и может использовать любого защищенных членов Y на себе, как если бы эти члены принадлежали X; кроме того, определение класса X может использовать статические члены Y, как если бы они были его собственными.
Переменные типа Y может содержать ссылки на экземпляры типа X.
Допуская объект класса расценить как его собственное содержание нескольких других классов делает невозможным иметь и сбросов downcasts сохранить идентичность ; поскольку полезными являются восходящие и понижающие данные, Java и .NET позволяют каждому классу рассматривать членов только одного родителя как своего собственного (члены родительского родителя также являются членами родителя и становятся включенными как таковые). Ограничение включения членов только из одного родительского класса обычно не является чрезмерно ограничительным.
С другой стороны, если каждый тип может храниться только в ссылках своего типа или его типах предков, это будет ограничительным. Чтобы обеспечить возможность сохранения ссылок на объект в нескольких независимых типах, Java и .NET позволяют определять типы интерфейсов. Ссылка на объект, который реализует интерфейс, может храниться в переменной этого типа интерфейса (для достижения второго преимущества наследования), но в отличие от наследования классов, которая ограничена одним родителем, реализация интерфейса относительно неограничена. Класс может реализовывать произвольное количество независимых интерфейсов, а ссылки на такой класс могут храниться в переменных любого из типов этих интерфейсов.
Вкратце, интерфейсы обеспечивают самое важное преимущество наследования (ссылочную замену), но отказываются от некоторых функций в обмен на отказ от значительного ограничения (невозможность наследования от нескольких классов).
Не уверен, что вы имеете в виду, но интерфейс является договором между пользователями класса и разработчиком. Пользователь не требует каких-либо знаний о реализации, он должен знать свой интерфейс. См. Дополнительную информацию о интерфейсах: http://stackoverflow.com/search?q=what+is+an+interface –
Привет, спасибо, что я искал. Кстати, есть ли какие-либо потоки с простыми примерами концепции программирования OO ?. – Seeker
Есть много вопросов с тегом oop: http://stackoverflow.com/questions/tagged/oop. –