栈的Java继承
我正在尝试扩展stack类,但我想知道是否要这样做:栈的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
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++了,我认为在扩展类(如堆栈)时不能指定泛型类型。您需要使用类似于的类测试扩展堆栈
,所以即使我只想让这个堆栈与整数一起工作?谢谢,这很有帮助。