编辑: 我将把它留在这里作为示例。阅读评论以获取更多信息,但一般来说:不要使用此设计!这很糟糕!
我搜索了一段时间的答案,但找不到任何真正具体的说法,不,你不能,因为......或者是的,你可以,这就是你的做法......
所以问题是,我能否创建一个定义对象类型参数的抽象方法,然后使用具体的参数类型来实现它,如下所示:
public abstract class ToBeOverriden {
public Object method1 (Object parameter);
public String method2 (Object parameter);
public void method3 (Object parameter);
}
然后用这个覆盖它:
public class Implementation {
@Override
public DateTime method1 (Person parameter){
return new DateTime();
}
@Override
public String method2 (MotorCycle parameter){
return new DateTime();
}
@Override
public void method3 (String parameter){
return new DateTime();
}
}
其中 Person 是我创建的对象。返回类型可以是任何类型。目前我不能这样做。它不允许我。我的猜测是这是因为我的类没有扩展对象。虽然一切都扩展了 Object...所以...
或者我需要更新我的 Java 知识吗? :)
编辑:添加了一个更复杂的类结构。
谢谢!
最佳答案
您需要使用 Java Generics :
public abstract class ToBeOverriden<E,V> {
public E method (V parameter);
}
public class Implementation extends ToBeOverriden<DateTime,Person> {
@Override
public DateTime method (Person parameter){
return new DateTime();
}
}
添加:
E
参数可以省略,代码仍然可以编译。但是,如果 ToBeOverriden
的不同实现将使用不同的返回类型,我认为最好保留 E
。但这是个人品味的问题 - 我不喜欢在代码中的任何地方看到 Object
。
新增 2 个:
关于您在问题中的更新,您需要为每个方法都有一个单独的通用类型。例如:
public abstract class ToBeOverriden<A,B,C> {
public Object method1 (A parameter);
public String method2 (B parameter);
public void method3 (C parameter);
}
但是,通常情况下,当您需要这样一个可怕的结构时,您的代码就会以错误的方式设计。在 95% 的情况下,1 个泛型类型参数就足够了。在 4.99% 的情况下,2 个泛型类型参数就足够了。
关于Java - 用具体类型覆盖对象类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9632205/