Java 带参数的超级方法
我遇到了这段代码,并试图了解super在这里做什么:Java 带参数的超级方法,java,stack,Java,Stack,我遇到了这段代码,并试图了解super在这里做什么: import java.util.Stack; public class StackWithMax extends Stack<Integer> { Stack<Integer> s2; public StackWithMax() { s2 = new Stack<Integer>(); } public void push(int value){ if (value &
import java.util.Stack;
public class StackWithMax extends Stack<Integer> {
Stack<Integer> s2;
public StackWithMax() {
s2 = new Stack<Integer>();
}
public void push(int value){
if (value >= max()) {
s2.push(value);
}
super.push(value);
}
public Integer pop() {
int value = super.pop();
if (value == max()) {
s2.pop();
}
return value;
}
public int max() {
if (s2.isEmpty()) {
return Integer.MIN_VALUE;
} else {
return s2.peek();
}
}
}
import java.util.Stack;
公共类StackWithMax扩展堆栈{
堆栈s2;
公共StackWithMax(){
s2=新堆栈();
}
公共无效推送(int值){
如果(值>=max()){
s2.推送(值);
}
super.push(值);
}
公共整数pop(){
int value=super.pop();
如果(值==max()){
s2.pop();
}
返回值;
}
公共int max(){
if(s2.isEmpty()){
返回Integer.MIN_值;
}否则{
返回s2.peek();
}
}
}
调用super.push(value)时,修改的对象是什么
调用s2.push(value)和super.push(value)有什么区别,因为super指的是
堆栈,s2是堆栈?这里有两个堆栈。StackWithMax本身就是一个堆栈。它包含第二个堆栈
对超级方法的调用处理第一个堆栈。所以区别在于,实际上有两种不同的数据结构可以在这里访问
它就像一辆卡车,上面有一辆汽车。两者都是车辆,因此您可以启动两个发动机。此代码手头有两个堆栈,可以对其进行操作
在这种特殊情况下,需要像这样使用super-如果该push方法只调用push()-而不是super.push()-那么最终会出现无休止的递归和stackoverflow异常 s2
是StackWithMax
的成员,但StackWithMax
也继承自Stack
当您想要推入s2时,您可以编写s2.push()
,但是当您想要推入“您自己”时,您可以调用继承的推入方法<之所以使用code>super
关键字,是因为您还重写了push方法。查看此问题的简单方法是打印.this(StackWithMax)和成员堆栈(s2)的堆栈。您将看到,根据提供的INT,它们是不同的。