在另一个类中修改堆栈

时间:2016-04-17 11:51:33

标签: java stack

试图了解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类需要pop()和push()A类中的堆栈.A类是否需要实现类似的get方法:

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

然后Stack B有以下方法:

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

或者,ClassA是否需要实现set方法? e.g。

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

导致B级以下......

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

当返回堆栈变量时,我不知道修改它是否会修改A类持有的原始文件,或者是否返回副本.....

3 个答案:

答案 0 :(得分:0)

A类应该从其堆栈中为popget提供方法。使用i方法返回整个堆栈并不是很好;作为一般规则,不要返回用户不需要的东西。

您应该了解封装。这是面向对象编程的一个非常重要的概念,如果不了解它,您将无法设计高质量的应用程序。

答案 1 :(得分:0)

在这种情况下,由于您的堆栈由A类持有,因此直接将堆栈提供给B类不是一个好习惯。相反,您可以按照建议的方式在class A中实现方法堆栈pop和堆栈push。这是展示JAVA 封装的示例。

始终尽可能地隐藏底层实现。

答案 2 :(得分:0)

为什么不使A实现与Stack接口中的方法相同,只是将它们传递给Stack成员?

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

它比在A ...中暴露Stack对象更好的设计