我定义了一个抽象类如下:
public abstract class Move implements Comparable<Move> {
protected int cell;
protected int weight;
public int getWeight()
{
return this.weight;
}
public void setWeight(int value)
{
this.weight = value;
}
protected Move(int cell)
{
this.cell = cell;
this.weight = 0;
}
protected Move(int cell, int weight)
{
this.cell = cell;
this.weight = weight;
}
@Override
public int compareTo(Move m)
{
return this.weight - m.weight;
}
我还有另外 2 个类扩展了这个类(分类为 MoveLeft 和 MoveRight)。我将这两种类型的对象都添加到 Move 类型的 List 中,然后使用 Collections.sort 进行排序:
List<Move> moves = new ArrayList<Move>(someSize);
moves.add(new MoveLeft(cell1));
moves.add(new MoveRight(cell2));
moves.add(new MoveRight(cell3));
moves.add(new MoveLeft(cell4));
Collections.sort(moves);
但是,列表是按单元格而不是按重量排序的。
不能在同一种类型中混合不同的子类实例吗?
注意:我在子类构造函数中为权重设置了一个唯一值。