java中从堆栈继承的自定义堆栈类始终保持为空

java中从堆栈继承的自定义堆栈类始终保持为空,java,inheritance,stack,Java,Inheritance,Stack,我从Java堆栈类继承了一个类表。 我已经覆盖了我这个类的push和pop方法。 不知何故,每次推送时,都不会向堆栈中添加任何内容,显示size()始终为零。请告诉我可能出了什么问题。 附件代码: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Stack; class Tables extends Stack<In

我从Java堆栈类继承了一个类表。 我已经覆盖了我这个类的push和pop方法。 不知何故,每次推送时,都不会向堆栈中添加任何内容,显示size()始终为零。请告诉我可能出了什么问题。 附件代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;


class Tables extends Stack<Integer>{
boolean full;
int tabCount;
int cleanCount;
Stack<Integer> stack;
public Tables(int n){
    tabCount = n;
    stack = new Stack<Integer>();
    full = false;
    cleanCount = 0;
}
@Override
public synchronized Integer pop() {
    full = false;
    return super.pop();
}
@Override
public Integer push(Integer item) {
    System.out.println(" PushStats : "+stack.size()+" "+tabCount +"  " + stack.isEmpty());
    if(stack.size() == tabCount-1)
    {
        full = true;
    }
    cleanCount ++;
    return super.push(item);
 }
}

public class Main1{

    public static void main(String[] args) throws NumberFormatException, IOException{
    int n,m,t;
    BufferedReader bReader = new BufferedReader(new InputStreamReader(System.in));

    t = Integer.parseInt( bReader.readLine());//Test Cases
    for(int test = 0 ; test <t ; test++){
        String holder = bReader.readLine();
        String[] temp = holder.trim().split(" ");
        n = Integer.parseInt(temp[0]);//Tables
        m = Integer.parseInt(temp[1]);//Orders
        holder = bReader.readLine();
        temp = holder.trim().split(" ");
        Integer[] orders = new Integer[m];
        for(int i =0; i<m ; i++){
            orders[i] = Integer.parseInt(temp[i]);
        }
        process(n,m,orders);
    }
 }


private static void process(int n, int m, Integer[] orders) {
   Tables tables = new Tables(n);
   for(Integer order : orders){
        System.out.println("  Order from :"+order+". Stack status :full =  "+tables.full);

        if(tables.search(order) == -1){
            if(tables.full){
                System.out.println("Popped out: "+tables.pop());
            }
            tables.push(order);
        }
      }
      System.out.println("Result : "+ tables.cleanCount);
    }
}
导入java.io.BufferedReader;
导入java.io.IOException;
导入java.io.InputStreamReader;
导入java.util.Stack;
类表扩展堆栈{
布尔满;
int tabCount;
整数清洁计数;
堆叠;
公共表(int n){
tabCount=n;
堆栈=新堆栈();
满=假;
cleanCount=0;
}
@凌驾
公共同步整数pop(){
满=假;
返回super.pop();
}
@凌驾
公共整数推送(整数项){
System.out.println(“PushStats:+stack.size()+”“+tabCount+”“+stack.isEmpty());
if(stack.size()==tabCount-1)
{
完整=正确;
}
cleanCount++;
返回超级推送(项目);
}
}
公共类main 1{
公共静态void main(字符串[]args)引发NumberFormatException,IOException{
int n,m,t;
BufferedReader bReader=新的BufferedReader(新的InputStreamReader(System.in));
t=Integer.parseInt(bReader.readLine());//测试用例

例如(int test=0;test您已经扩展了
堆栈
,从而继承了它的所有功能,拥有对内部字段等的一些访问权限。但是您也在构造函数中创建了一个
堆栈
实例,并将其保留为字段。您的一些方法委托给该实例,而其他方法调用
super
上的方法

删除
堆栈;
行,并使引用它的每一行使用继承的字段、方法或执行超级调用


您在这里混淆了两种方法:委派和继承。您的类
堆栈
,因此它可能不需要保存另一个堆栈。

请输入一些代码……您覆盖了
推送
弹出
方法,因此如果希望我们能够告诉您是什么,您需要发布这些方法错了。我打赌你忘了调用
super.push(T)
super.pop()
在重写方法中。所以你希望我们通过猜测来帮助你。很好。请在第3行添加一个
i++
并告诉我们它是否有帮助。我很抱歉,没有添加代码。添加,请现在看一看。我犯了一个愚蠢的错误。是的,合并了两种不同的方法。非常感谢。@ck这是一个棘手的情况。我更喜欢一个注释,因为peop新加入该网站的le并不总是完全了解正确的做事方式。立即的否决票或关闭可能会吓跑他们,而在一些积极的鼓励下,他们可能最终成为社区中有价值的成员。因此,有一些学习曲线,我记得过去人们更耐心,关闭的次数更少。当然,s有些问题显然无法保存。这一个问题只需要编辑代码,然后阅读一下。