我有两个班级,Club
和party
。 Club
extends
通用Queue<E>
并实现fitnessInterface
。
Queue<E> implements QueueInterface<E>
分会
public class Club extends Queue<Bachelor> implements fitnessInterface{
protected Queue<Bachelor> bachelorQ;
public Club(){
super();
bachelorQ = new Queue<Bachelor>();
}
public boolean Eligible(Bachelor bachelor){
if(bachelor==null){throw new NullPointerException();}
return true;
}
@Override
public QueueInterface<Bachelor> enqueue(Bachelor bachelor){
if(bachelor==null){
throw new NullPointerException();
else{
bachelorQ.enqueue(bachelor); }
return this; //the class queue
}
}
派对
public class Party extends Club{
super();
}
@Override
public boolean Eligible(Bachelor bachelor){
if(bachelor==null){throw new NullPointerException();}
if(bachelor.getPushups()>=25){return true;}
return false;
}
}
Bachelor
类扩展了QueueInterface
并且有一个构造函数,它接受Integer
作为参数,并且具有getPushUps()
方法。
问题是当我创建一个Party
对象并试图将Bachelors ralph或charlie排队时,它仍然是空的。
我的通用队列类非常完美。它有dequeue
,enqueue
,isEmpty
,peek
,size
和toString
方法。一切正常。
主要
public static void main(String[] args){
Party bigParty = new Party();
Bachelor jack,charlie,ralph;
jack = new Bachelor(15);
ralph = new Bachelor(27);
charlie = new Bachelor(39);
//Eligibility tests
System.out.println(bigParty.Eligible(charlie));
System.out.println(bigParty.Eligible(ralph));
System.out.println(bigParty.Eligible(jack));
System.out.println(bigParty.enqueue(ralph));
System.out.println(bigParty.enqueue(charlie));
System.out.println(bigParty.size());
System.out.println(bigParty.bachelorQ.size());
}
输出继电器
true
true
false
[]
[]
0
2
答案 0 :(得分:1)
当你混合继承和组合时会发生这种情况。检查此方法:
@Override
public QueueInterface<Bachelor> enqueue(Bachelor bachelor){
if(bachelor==null){
throw new NullPointerException();
bachelorQ.enqueue(bachelor);
return this; //the class queue
}
}
您在enqueue()
上调用bachelorQ
,但返回this
。两者都是不同的引用,指向不同的对象。
您应该返回bachelorQ
,或者只是调用super.enqueue(bachelor)
。
顺便说一句,既然你已经延长了Queue<Bachelor>
,我就不会在那里看到bachelorQ
引用的必要性。你可以删除它。或者甚至更好,不要从Queue<Bachelor>
延伸。你应该尽可能优先考虑构图而不是继承。
答案 1 :(得分:1)
我同意Rohit Jain所说的一切。但是,这里还有一个问题。在您的enqueue方法中,您已将内容包装在if(bachelor==null)
块中。因此,如果单身汉无效,bachelorQ只会将单身汉排队。我认为这不是你打算如何工作的。
@Override
public QueueInterface<Bachelor> enqueue(Bachelor bachelor){
if(bachelor==null){
throw new NullPointerException();
bachelorQ.enqueue(bachelor);
return this; //the class queue
}
}
我建议你重写你的俱乐部课程,看看更像这样的东西:
public class Club implements fitnessInterface
{
protected Queue<Bachelor> bachelors;
public Club(){
super();
bachelors = new Queue<Bachelor>();
}
public boolean Eligible(Bachelor bachelor)
{
if(bachelor==null) throw new NullPointerException();
return true;
}
@Override
public QueueInterface<Bachelor> enqueue(Bachelor bachelor)
{
if(bachelor==null) throw new NullPointerException();
bachelors.enqueue(bachelor);
return bachelors;
}
}