覆盖Java

时间:2012-01-11 02:54:01

标签: java override

有没有办法覆盖Java方法,唯一改变的是ArrayList?

例如:

public void quickSortMethod(ArrayList<Integer> comparison, int start, int end)   
{}   

public void quickSortMethod(ArrayList<Double> comparison, int start, int end)   
{}   

目前这给我以下错误:

Method quickSortMethod(ArrayList<Integer>, int, int) has the same erasure quickSortMethod(ArrayList<E>, int, int) as another method in type QuickSort   

顺便说一句,我正在使用我在ArrayLists中创建的其他对象作为参数

ArrayList<MyObject>...    

6 个答案:

答案 0 :(得分:10)

在这种情况下,您可以尝试使该方法本身是通用的,并将该类型用作ArrayList类型...

public <T> void quickSortMethod(ArrayList<T> comparison, int start, int end)

答案 1 :(得分:3)

不幸的是,没有。由于编译后type erasure,两者之间没有区别。

答案 2 :(得分:0)

错误告诉你答案:你不能做你提出的建议。

http://docs.oracle.com/javase/tutorial/java/generics/erasure.html

答案 3 :(得分:0)

你可以用

将它变成一个函数
ArrayList<Object>,int,int

然后根据arraylist的对象类型采用不同的分析

答案 4 :(得分:0)

由于您将使用这些数组列表作为参数对象,因此您可以定义自己继承自Arraylist的自定义对象。这样,编译器会将您的重载识别为具有不同的签名。

当然,这意味着任何客户端代码都需要知道要传递的子类型。但这应该是一个相对容易解决的问题,因为如果你知道你正在为你的参数对象提供内容,那么初始化一个integerParamList。同样是双打。

在不了解其余代码的情况下,这可能是也可能不是一个合适的解决方案,但它可能会接近? (我无法对此进行测试,因此可能存在未知问题......)

public class mySortingClass {

    public void quickSortMethod(IntegerParamList comparison, int start, int end)    
    {}    

    public void quickSortMethod(DoubleParameterList comparison, int start, int end)    
    {} 

}

public class IntegerParamList extends ArrayList<Integer>
      {}

public class DoubleParameterList extends ArrayList<Integer>
      {}

答案 5 :(得分:0)

这是覆盖的有效示例,这也是答案   我们可以覆盖静态方法吗?   答案是否定的。

这是示例代码。

  package com.sample.test;

class Animal {

public static void showMessage() {
    System.out.println("we are in Animal class");
}

}

类狗延伸动物{

public void DogShow() {
    System.out.println("we are in Dog show class");
}

public static void showMessage() {
    System.out.println("we are in static overridden method of dog class");
}

}

class Cat extends Animal {

public static void showMessage(){
    System.out.println("we are in overridden cat class");
}

}

公共类AnimalTest {

public static void main(String[] args) {
    Animal animal = new Animal();
    animal.showMessage();

    Dog dog = new Dog();
    dog.showMessage();

    Animal animal2 = new Dog();
    animal2.showMessage();

    Animal animal3 = new Cat();
    animal3.showMessage();

}

}

<强>输出:

我们在动物课上 我们在狗类的静态重写方法 我们在动物课上 我们在动物课