2016-04-17 82 views
0

試圖圍繞讓我的頭get/set方法,具體如何修改由另一個類召開棧....修改堆棧中的另一個類

A類有以下實例變量:

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

A型類的一個目的是在B類的一個實例變量:)

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

類B需要彈出(和推()在類A中的堆疊是否一類需要實現像get方法所以:

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

,然後棧B有以下方法:

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

或者,也ClassA的需要實施一套方法?例如

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

在B級以下的所得.....

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

當返回堆棧變量,我不知道是否修改它修改由A類保存的原始,或是否返回副本.....

+0

通知,你必須返回'popStack()'字符串,所以做'公共字符串popStack()'而不是' public void popStack()' – Dimi

+0

啊,是的,這實際上是我在我的代碼中。 – javapalava

回答

0

A類應提供方法pushpop東西從它的堆棧。用get方法返回整個堆棧並不是很好;作爲一般規則,不要返回用戶不需要的東西。

您應該瞭解封裝。這是面向對象編程的一個非常重要的概念,如果不知道它,您將無法設計高質量的應用程序。

+0

好,非常感謝Nico – javapalava

+0

@javapalava如果有用,請不要猶豫,接受答案。另外,請閱讀封裝。 – Nico

0

在這種情況下,由於您的堆棧正在被類A佔用,因此直接將堆棧指定給類B並不是一種好的做法。相反,您可以像pop那樣實現class A中的方法並將push添加到堆棧。這是展示JAVA 封裝的示例。

總是儘可能地隱藏底層實現。

0

爲什麼不讓A實現與Stack接口中的方法相同,只是將它們傳遞給它的Stack成員?

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

它比暴露在一個Stack對象更好的設計...