试图了解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类持有的原始文件,或者是否返回副本.....
答案 0 :(得分:0)
A类应该从其堆栈中为pop
和get
提供方法。使用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对象更好的设计