栈的Java继承

栈的Java继承,java,class,inheritance,extend,Java,Class,Inheritance,Extend,我正在尝试扩展stack类,但我想知道是否要这样做: class test extends Stack<Integer> { public boolean add(Integer i) { if (i != 0) { super.add(i); } } } 类测试扩展堆栈 { 公共布尔加法(整数i) { 如果(i!=0) { 增列(i); } } } 该代码是否也会更改它,以便使用t

我正在尝试扩展stack类,但我想知道是否要这样做:

class test extends Stack<Integer> 
{
    public boolean add(Integer i)
    {
        if (i != 0)
        {
            super.add(i);
        }
    }
}
类测试扩展堆栈
{
公共布尔加法(整数i)
{
如果(i!=0)
{
增列(i);
}
}
}
该代码是否也会更改它,以便使用test.push()也会使用上述代码? 编辑:另外,如果我没有定义一个特定的构造函数,它会调用父级的默认构造函数吗

该代码是否也会更改它,以便使用test.push()也会使用 以上代码

我不这么认为,因为我不认为
java.util.Stack
中的
push
方法调用
add
方法。
push
方法如下所示:

    public E push(E item) {
        addElement(item);

        return item;
    }
我希望这有帮助

编辑:

要回答第二个问题

另外,如果我没有定义一个特定的构造函数,它会调用 父级的默认构造函数

如果不声明构造函数,则会得到一个默认的无参数构造函数,该构造函数调用父类中的默认无参数构造函数。以下内容与此相同

public class One extends Stack {
}

public class Two extends Stack {
    public Two() {
        super();
    }
}

我认为那样做是个糟糕的主意。虽然堆栈类似乎不使用add方法(使用了addElement),但它有几个问题:

  • Add方法不是预期堆栈API的一部分,而是内部表示的一部分(类使用或未使用)
  • 您将使用不同的方式添加元素,通过添加(不包括零)和推送(包括零)
  • 使用零调用add方法不会产生错误,因此,用户会认为堆栈包含该元素

您正在尝试使用不接受零元素的堆栈吗?也许组合是更好的解决方案…

Int
?是自定义类型还是u的意思是
整数
?是的,对不起,这就是我的意思。。。我太习惯C++了,我认为在扩展类(如堆栈)时不能指定泛型类型。您需要使用类似于
的类测试扩展堆栈
,所以即使我只想让这个堆栈与整数一起工作?谢谢,这很有帮助。