2012-01-26 46 views
3

对于接口如压倒一切的接口方法

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(); } 
... 
} 

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

回答

0

从我明白抽象方法的someMethod()需要 与返回实现 接口的对象的方法重写。

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

3

你错过了实现类中的泛型声明。这里有一个例子:

public interface Something <T> { 

    public Something<T> someMethod(); 

} 

class SomethingImplementation <T> implements Something <T> { 

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

} 
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(); 
    } 
} 
0

你还需要将接口与通用的扩展,如:

公共类SomeClass的实现东西{ 公众Some someththod(){ ... } }

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>(); 
    } 
} 
0

覆盖您必须实现与同类型paramenters和相同的方法等返回值的类型。
String something(){}
String something(){}
但与char[] something(){}String something(int){}

0

据我了解,你需要实现接口的东西会被覆盖,你可以简单的方式做到这一点:

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

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