当我尝试覆盖一个方法时,我遇到了java问题,我的代码如下:
public abstract class CustomAdapter{
public abstract Boolean addItem(Class<? extends Object> aObject);
}
public class RainAdapter extends CustomAdapter {
@Override
public Boolean addItem(ClassOfRain aRainInfo) {
// do something
return true;
}
}
我可以声明&#34; Class&#34;到&#34; ClassOfRain&#34;? 如果是,该怎么办?
感谢您的阅读!
答案 0 :(得分:5)
我觉得你有点困惑。你确定你不想说:
public abstract class CustomAdapter<T extends Object> {
public abstract Boolean addItem(T aObject);
}
public class RainAdapter extends CustomAdapter<Rain> {
@Override
public Boolean addItem(Rain aRainInfo) {
// do something
return true;
}
}
在我对类结构的解释中,您试图创建一个通用的addItem
方法,因此传递实际的类对象是没有用的。
答案 1 :(得分:0)
这是不可能的。方法覆盖意味着您放置完全相同的方法标头。您唯一可以更改的是给定参数的名称。
答案 2 :(得分:0)
Class<Rain.class>
会反映Rain
类。但这不起作用,因为重写的方法必须具有相同的形式参数,因此您必须使用Class<? extends Object>
。
答案 3 :(得分:0)
方法签名在实现抽象/接口方法和/或覆盖时必须匹配...你可以做这样的事情
public abstract class CustomAdapter{
public abstract Boolean addItem( Object o );
}
public class RainAdapter extends CustomAdapter {
public Boolean addItem( Object o ){
if ( o.getClassName().equals( "ClassOfRain" ) ){
return this.addItem( (ClassOfRain) o );
}
return false;
}
private Boolean addItem(ClassOfRain aRainInfo) {
// do something
return true;
}
}