В Java 1.8 (а также в Groovy и Scala) есть такая вещь, как « Методы защитника интерфейса », которые представляют собой интерфейсы с предопределенными телами методов по умолчанию.Реализуя несколько интерфейсов, использующих методы защитника, вы могли бы, в некотором роде, расширить поведение двух интерфейсных объектов.
Кроме того, в Groovy, используя аннотацию @Delegate, вы можете расширить поведение двух или болееклассы (с оговорками, когда эти классы содержат методы с тем же именем).Этот код доказывает это:
class Photo {
int width
int height
}
class Selection {
@Delegate Photo photo
String title
String caption
}
def photo = new Photo(width: 640, height: 480)
def selection = new Selection(title: "Groovy", caption: "Groovy", photo: photo)
assert selection.title == "Groovy"
assert selection.caption == "Groovy"
assert selection.width == 640
assert selection.height == 480