Как вы имеете дело с наличием только одного наследования в java? Вот моя конкретная проблема:Проблема с множественным наследованием в Java
У меня есть три (упрощенный) классы:
public abstract class AbstractWord{
String kind; // eg noun, verb, etc
public String getKind(){ return kind; }
}
public class Word extends AbstractWord{
public final String word;
ctor...
public void setKind(){
// based on the variable word calculate kind..
}
}
public class WordDescriptor extends AbstractWord{
ctor..
public void setKind(String kind){this.kind = kind;}
}
Это то, что я считаю свою самую основную реализацию, но я хочу, чтобы другие реализации.
Допустим, что я хочу добавить новую переменную say wordLength, но я хочу добавить ее с помощью наследования. Значение Я НЕ хочу изменить этот оригинальный класс AbstractWord. Т.е. что-то вдоль линий этого:
public class Length{
private int length;
public int getLength(){return length};
}
public class BetterWord extends AbstractWord AND Length{
public void setLength(){
// based on the variable word calculate Length..
}
}
public class BetterWordDescriptor extends AbstractWord AND length{
public void setLength(int length){this.length = length;}
}
Я знаю, что Java не позволяет мне это сделать, но это сделало мой код очень некрасиво. Прямо сейчас, когда я добавляю поле, я просто добавляю его в AbstractWord, но потом мне нужно либо переименовать этот AbstractWord (и Word и WordDescriptor). (Я не могу просто добавить поле к другому из-за обратной совместимости, он прерывает одинаковые методы и тому подобное).
Это похоже на довольно распространенную проблему с дизайном, но у меня возникла проблема, и я не могу придумать какие-либо красивые решения.
Есть ли шаблон дизайна, который обращается к этому? У меня есть некоторые потенциальные решения, но я хотел посмотреть, нет ли чего-то, чего я не видел.
спасибо, Jake
Update: Длина относится к числу слогов в слове (пардон об отсутствии ясности)
ли 'Length' должен быть класс вместо интерфейса? –
@Loadmaster: Length - это класс, а не интерфейс, поэтому методы в длину не должны дублироваться как в Word, так и в WordDescriptor. Для длины эти методы являются простыми, но для других вещей они могут быть очень сложными. – sixtyfootersdude
@ Jake: Если другие вещи могут быть очень сложными, вы должны определенно использовать «Шаблон стратегии». –