Вы не можете сделать это напрямую. Я думаю, что то, о чем вы здесь в основном просите, это множественное наследование, и эта концепция, кажется, дает разработчикам языка Java плохую опрометчивость. Вы можете реализовать что-то подобное самостоятельно.
Предположим, у вас есть интерфейс Food
public interface Food {
void setTitle(String s);
void setSize(String s);
void setState(String s);
}
Тогда вы можете сделать это:
public class BaseFood implements Food {
private String title;
private String size;
private String state;
// setters and getters...
}
А потом вот это:
public class Banana extends Fruit implements Food {
private BaseFood food = new Food();
public Banana() {
food.setTitle("Banana");
food.setSize("Medium");
food.setState("Rotten");
}
}
Для полноты, вот Sausage
, это в основном то же самое, что и Banana
:
public class Sausage extends Meat implements Food {
private BaseFood food = new Food();
public Sausage() {
food.setTitle("Kielbasa");
food.setSize("Medium");
food.setState("Tasty");
}
}
Это называется «делегированием», когда вы делегируете реализацию какого-либо интерфейса в Java другому объекту, только заявляя, что он реализует общий интерфейс, а затем просто вызывая методы для частного экземпляра, который фактически реализует этот интерфейс. Это в основном ручное множественное наследование.
Достаточно часто, что моя IDE (NetBeans) сделает большую часть работы за меня. При наличии интерфейса и члена частного экземпляра, который реализует этот интерфейс, он напишет все методы, необходимые для публичной реализации этого интерфейса. Это работает хорошо, но может генерировать много шаблонного. Я бы хотел, чтобы люди на Java хотя бы частично нашли решение в языке «проблемы множественного наследования».
РЕДАКТИРОВАТЬ: Вы сказали, что нет общих классов, но затем вы сказали это:
Вы не можете создать базовый класс в этом случае, так как это Java с единым наследованием - и Sausage, и Banana уже что-то расширяют. Если я не пропущу что-то, что вы можете увидеть ...
Если вы можете изменить наследование, вы можете создать общий базовый класс:
class Food { ...
class Fruit extends Food {...
class Banana extends Fruit {...
class Meat extends Food {...
class Sausage extends Meat { ...
Но мой ответ предполагал, что вы не можете сделать это по любой причине.