Wie alle anderen gesagt haben. Nein, das kannst du nicht. Obwohl die Leute im Laufe der Jahre oft gesagt haben, dass Sie mehrere Schnittstellen verwenden sollten, haben sie sich nicht wirklich damit befasst, wie. Hoffentlich hilft das.
Angenommen, Sie haben class Foound class Barmöchten beide versuchen, sich in eine zu erweitern class FooBar. Natürlich können Sie, wie Sie sagten, nicht Folgendes tun:
public class FooBar extends Foo, Bar
Die Gründe dafür sind bereits teilweise bekannt. Schreiben Sie stattdessen interfacesfür beide Foound Bardecken Sie alle öffentlichen Methoden ab. Z.B
public interface FooInterface {
public void methodA();
public int methodB();
//...
}
public interface BarInterface {
public int methodC(int i);
//...
}
Und jetzt machen Foound Barimplementieren Sie die relativen Schnittstellen:
public class Foo implements FooInterface { /*...*/ }
public class Bar implements BarInterface { /*...*/ }
Mit class FooBarkönnen Sie jetzt beides implementieren FooInterfaceund BarInterfacedabei ein Foound Bar-Orth behalten und die Methoden direkt durchlaufen:
public class FooBar implements FooInterface, BarInterface {
Foo myFoo;
Bar myBar;
// You can have the FooBar constructor require the arguments for both
// the Foo and the Bar constructors
public FooBar(int x, int y, int z){
myFoo = new Foo(x);
myBar = new Bar(y, z);
}
// Or have the Foo and Bar objects passed right in
public FooBar(Foo newFoo, Bar newBar){
myFoo = newFoo;
myBar = newBar;
}
public void methodA(){
myFoo.methodA();
}
public int methodB(){
return myFoo.methodB();
}
public int methodC(int i){
return myBar.methodC(i);
}
//...
}
Der Bonus für diese Methode ist, dass das FooBarObjekt in die Formen von beiden FooInterfaceund passt BarInterface. Das heißt, das ist vollkommen in Ordnung:
FooInterface testFoo;
testFoo = new FooBar(a, b, c);
testFoo = new Foo(a);
BarInterface testBar;
testBar = new FooBar(a, b, c);
testBar = new Bar(b, c);
Ich hoffe, dies verdeutlicht die Verwendung von Schnittstellen anstelle mehrerer Erweiterungen. Auch wenn ich ein paar Jahre zu spät bin.