Скажем, у меня есть несколько интерфейсов, которые все простираются от родительского интерфейса. В родительском интерфейсе есть некоторые члены, которые должны использоваться всеми дочерними интерфейсами, поэтому обычно я хотел бы добавить конструктор в родительский интерфейс для установки этих общих элементов. Но это невозможно сделать, поскольку классы являются интерфейсами, а не абстрактными классами. И я не могу просто изменить их на абстрактные классы, потому что я бы позволил классу реализовать несколько интерфейсов, что невозможно сделать с помощью абстрактных классов. Как вы разрешаете это, но при этом соблюдаете требования к дизайну?Устранение недостающего конструктора в родительском интерфейсе JAVA
например.
interface Parent {
SomeCommonMember commMember;
Parent(SomeParameter para) {
// do some calculations to init commMember based on para
commMember = ...;
}
}
interface ChildA extends Parent {
void ChildAMethod();
}
interface ChildB extends Parent {
void ChildBMethod();
}
public class MyImplementation implements ChildA, ChildB {
MyImplementation(SomeParameter para) {
super(para);
};
void ChildAMethod() {
// uses commMember
};
void ChildBMethod() {
// uses commMember
};
}
public class Test {
public static void main(String[] args) {
Parent generic = new MyImplementation(new SomeParameter());
if (generic instanceof ChildA) {
generic.ChildAMethod();
}
if (generic instanceof ChildB) {
generic.ChildBMethod();
}
}
}