重写接口方法

时间:2012-01-26 15:31:39

标签: java generics inheritance interface

用于

等界面
public interface something<T>
{
   public something<T> somemethod();
}

从我理解的抽象方法somemethod()需要用一个返回实现接口的对象的方法来覆盖。但是,任何这样做的尝试都给了我“不会覆盖抽象方法somemethod()”编译错误。

我尝试过像

这样的事情
public class someclass {
...
    public something<T> somemethod() { ... return new someclass(); }
...
or 
    public someclass somemethod() { ... return new someclass(); }
...
}

我究竟会如何实施这样的方法?

8 个答案:

答案 0 :(得分:3)

您在实现类中缺少泛型声明。这是一个例子:

public interface Something <T> {

    public Something<T> someMethod();

}

class SomethingImplementation <T> implements Something <T> {

    @Override
    public Something<T> someMethod() {
        return null;
    }

}

答案 1 :(得分:3)

所有这些都应该编译:

class test<T> implements something<T>{
    public something<T> somemethod(){
        return new test<T>();
    }
}

class test1<T> implements something<T>{
    public test1<T> somemethod(){
        return new test1<T>();
    }
}   

class test2 implements something<Integer>{
    public something<Integer> somemethod(){
        return new test2();
    }
}

class test3 implements something<Integer>{
    public test3 somemethod(){
        return new test3();
    }
}

答案 2 :(得分:1)

首先,您的someclass未在上面的代码示例中实现该接口。您可以使其为特定的具体类型实现接口,如下例所示,其中String用作具体类型。然后该方法需要返回something<String>

public class someclass implements something<String> {
    public something<String> somemethod() {
        return new someclass();
    }
}

或者您可以让类someclass具有类型参数并将其用于接口:

public class someclass<X> implements something<X> {
    public something<X> somemethod() {
        return new someclass<X>();
    }
}

答案 3 :(得分:0)

  

从我理解somemethod()需要的抽象方法   用一个返回实现该对象的对象的方法重写   接口

这是不正确的。方法somemethod需要返回something<T>

答案 4 :(得分:0)

您还需要使用通用扩展接口,例如:

public class someclass实现了一些东西{   public some somemethod(){     ...   } }

答案 5 :(得分:0)

要覆盖方法,必须使用相同类型的参数和相同类型的返回值来实现方法。
String something(){}将覆盖String something(){} 但不是char[] something(){}String something(int){}

答案 6 :(得分:0)

据我所知,你需要实现接口,你可以用简单的方式做到这一点:

public class someclass<T> implements something<T> {
    public something<T> somemethod() { ... return new someclass(); }
}

答案 7 :(得分:0)

public class someclass<T> extends something<T> {

public something<T> somemethod() { ... return new someclass<T>(); }}