将对象传递给子类的方法

时间:2014-03-30 14:36:11

标签: java

假设我在Main中创建了两个对象,通过相同的构造函数,包含相同类型的5个整数。

Secondclass mp1 = new Secondclass ( 0 , 1 , 2 , 3 , 4 );
Secondclass mp2 = new Secondclass ( 5 , 6 , 7 , 8 , 9 );

在我的Secondclass我有一个名为Comparing的方法,我希望传递这两个对象并比较一些整数,有点像这样:

mp1.Comparing(mp1,mp2);

这在Java中是否可行?

我是编程新手,我希望我足够清楚。

3 个答案:

答案 0 :(得分:0)

您可以实施Comparator

public SecondClassComparator implements Comparator<SecondClass> {
      public int compare (SecondClass c1, SecondClass c2) { 
         // Do some comparision
      }
}

答案 1 :(得分:0)

Java具有Comparator(http://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html)接口。您可以在SecondClass类中实现比较器接口。

object1.compare(object1, object2)

但由于object1数据已经可用,我更愿意实现可比较的(http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html)接口。

您可以在java中使用equals方法时使用它

object1.compareTo(object2)

答案 2 :(得分:0)

Jon Skeet已经在他的评论中给了你一个答案,但是让我详细说明他用一些代码示例所说的内容:

公约规定您要在int compareTo(SecondClass other)中定义方法SecondClass,以便o1.compareTo(o2)返回

  • 如果认为o1小于o2
  • ,则为负值
  • 如果相等则为0
  • 如果认为o1大于o2 ,则
  • 为正值

为了更简单的示例,我们假设SecondClass只有一个int,即字段value。然后它可以实现如下:

public int compareTo(SecondClass other) {
    return this.value - other.value;
}

如果您这样做,您可以(而且应该)制作SecondClass工具Comparable

此外,您应该确保o1.compareTo(o2) == 0当且仅当o1.equals(o2)时,请确保您实现了正确的equals方法。在示例中,它可能如下所示:

public boolean equals(Object other) {
    (if other == null || !(other instanceof SecondClass)) 
        return false;
    else
        return this.value == ((SecondClass) other).value;
}

(当然,您也可以使用compareTo,将return语句替换为return compareTo((SecondClass) other) == 0

最后但并非最不重要的是,如果您覆盖equals方法,请务必同时覆盖hashCode,这样如果您的类的两个实例相同,则它们具有相同的哈希码。在示例中,您可以简单地使用整数值:

public int hashCode() {
    return value;
}

完整代码

public class SecondClass implements Comparable<SecondClass> {
    private int value;

    public int compareTo(SecondClass other) {
        return this.value - other.value;
    }

    public boolean equals(Object other) {
        (if other == null || !(other instanceof SecondClass)) 
            return false;
        else
            return this.value == ((SecondClass) other).value;
    }

    public int hashCode() {
        return value;
    }
}

这就是你需要做的一切。