2016-04-17 4 views
0

Den Versuch, meinen Kopf herum zu erhalten get/set-Methoden, insbesondere, wie ein Stapel von einer anderen Klasse .... Ändern Stapel in einer anderen Klasse

Klasse A

gehalten zu modifizieren, hat die folgende Instanzvariable:

public class ClassA { 
    private Stack<String> stack; 
    public ClassA { 
     stack = new Stack<String>(); 
    } 
} 

ein Objekt vom Typ der Klasse A ist eine Instanzvariable in der Klasse B:

public class Class B { 
    private ClassA classa; 
    public Class B(ClassA classa) { 
     this.classa = classa; 
    } 
} 

Klasse B muss pop() und push() die Stapel in der Klasse A. brauchen die Klasse A eine get-Methode zu implementieren, wie so:

public Stack<String> getStack() { 
    return stack; 
} 

und dann Stapel B hat die folgende Methode:

public void Pop(){ 
    try { 
     String a = classa.getStack().pop(); 
    } 
    catch (EmptyStackException e) { 
    } 
} 

Oder braucht sich KlasseA eine Set-Methode zu implementieren? z.B.

public void popStack() { 
    stack.pop();  
} 

Resultierende in der folgenden in der Klasse B .....

public void Pop(){ 
    try { 
     String a = classa.popStack(); 
    } 
    catch (EmptyStackException e) { 
    } 
} 

Wenn der Stapel Variable zurückgegeben wird, ich weiß nicht, ob es Modifizierung der ursprünglichen von der Klasse A gehalten modifiziert, oder ob es eine Kopie zurückgibt .....

+0

Hinweis, dass Sie die Zeichenfolge in 'popStack zurückkehren()', so tun 'public String popStack()' statt ' public void popStack() ' – Dimi

+0

Ah ja, das ist eigentlich, was ich in meinem Code hatte. – javapalava

Antwort

0

Klasse A sollte Methode zu push und pop Sachen von seinem Stapel zur Verfügung stellen. Die Rückgabe des gesamten Stacks mit einer get Methode ist nicht sehr gut; Im Allgemeinen sollten Sie keine Daten zurückgeben, die der Benutzer nicht benötigt.

Sie sollten etwas über Kapselung lernen. Es ist ein sehr wichtiges Konzept der objektorientierten Programmierung und Sie werden nicht in der Lage sein, qualitativ hochwertige Anwendungen zu entwickeln, ohne es zu kennen.

+0

OK gut, danke Nico – javapalava

+0

@javapalava zögern Sie nicht, die Antwort zu akzeptieren, wenn es nützlich war. Lesen Sie auch über Kapselung. – Nico

0

In diesem Szenario ist es nicht sinnvoll, den Stapel der Klasse B zuzuweisen, da Ihr Stapel von der Klasse A gehalten wird. Stattdessen können Sie Methoden in class A implementieren, wie Sie den Stapel pop vorschlagen und zu push zum Stapel. Dies ist ein Beispiel, wo JAVA Verkapselung ausgestellt ist.

Versuchen Sie immer, die zugrunde liegende Implementierung so weit wie möglich verborgen zu halten.

0

Warum nicht A die gleichen Methoden wie in der Stack-Schnittstelle implementieren und sie einfach an ihr Stack-Mitglied weitergeben?

public String pop() 
    { 
     return stack.pop(); 
    } 
public String push(String item) 
    { 
     return stack.push(item); 
    } 

es ist besser ausgebildet ist als die Stapel Objekt in A aussetzt ...