Der folgende Code zeigt, wie Methode m() durch Vererbung wiederverwendet werden kann. Wie funktioniert die Delegation? Vielen Dank!Vererbung vs. Delegierung
class A{
int m();
}
class B extends A{}
B b =new B()
b.m();
Der folgende Code zeigt, wie Methode m() durch Vererbung wiederverwendet werden kann. Wie funktioniert die Delegation? Vielen Dank!Vererbung vs. Delegierung
class A{
int m();
}
class B extends A{}
B b =new B()
b.m();
class B {
int m() {
return new A().m();
}
}
oder
class B {
private A a = new A();
int m() {
return a.m();
}
}
oder
class B {
private A a;
public B(A a) {
this.a = a;
}
int m() {
return a.m();
}
}
Inheritance bedeutet IS-A: "eine Instanz der Klasse B-A-Instanz der Klasse A".
Zusammensetzung bedeutet HAS-A: "Eine Instanz der Klasse B HAS-A Instanz der Klasse A".
So:
class B {
private A a;
public B(A a) { this.a = a; }
public int m() { return a.m(); }
}
Klasse B Delegierten seine Forderung an m(), um seine Instanz der Klasse A.
Es hilft, wenn beide eine gemeinsame Schnittstelle zu implementieren.
public interface DoSomething {
int m();
}
class A implements DoSomething {
public int m() { return 1; }
}
class B implements DoSomething {
private A a;
public B(A a) { this.a = a; }
public int m() { return a.m(); }
}