Я работаю в проекте, где у меня есть эти классы:множественное наследование Java
public class Rectangle {
public void printMe() {
print("I am a Rectangle");
}
}
public class Square extends Rectangle {
@Override
public void printMe() {
print("I am a Square");
}
}
public class RedRectangle extends Rectangle {
@Override
public void printMe() {
super.printMe();
print(" and I am red");
}
}
Эти классы, в coures, есть другие методы и атрибуты.
Я хотел бы создать еще один класс RedSquare, который наследует все атрибуты и методы из Rectangle, но ему также необходимо переопределить свои методы с помощью тех, которые присутствуют в классе Square. Он напечатает «Я - квадрат, а я красный», используя код из классов RedRectangle и Square.
Он должен иметь возможность использовать методы из Square и RedRectangle, если это возможно, в противном случае он должен использовать методы из Rectangle, и он должен заставить разработчика писать из своего кода код для всех тех методов, которые были переопределены в как Square, так и RedRectangle.
Я действительно знаю, что это множественное наследование, и Java не поддерживает его, но мне нужно реализовать такое поведение.
Я попытался реализовать это, используя Square и RedRectangle как частные атрибуты, так или иначе, если я вызываю определенный метод RedRectangle.myMethod(), который вызывает внутренне другой метод, он будет использовать реализацию, содержащуюся в себе (или, в конечном счете, в супер прямоугольник) а не в RedSquare (или в конечном итоге на площади), где он был переопределен.
Есть ли какой-нибудь полезный шаблон, который я могу использовать с максимальным количеством повторного использования кода? Как бы вы это реализовали?
Большое спасибо.
Вы можете использовать 'interfaces' ... Вы можете реализовать несколько' интерфейсов' в 'Java'. – brso05
Не объясняйте проблемы в своем коде, не отправляя также код, который имеет проблему. –
вы можете сделать что-то подобное в [java 8] (http://stackoverflow.com/questions/7857832/are-defaults-in-jdk-8-a-form-of-multiple-inheritance-in-java). –