2017-06-06 7 views
-3

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(); 

Antwort

2
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(); 
    } 
} 
2

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(); } 
}