我有一个超类SheetBuilder和许多继承这个类的子类。超类具有所有类继承的抽象方法。
protected abstract void printResults(String abc);现在,我想用不同的参数重载相同的方法,但是我只需要对一个子类进行重载。所以我修改了下面的抽象方法,
protected abstract void printResults(Object abc);这样我就可以用我想要接收的任何对象类型来实现我的子类,
子类impl:
protected void printResults(int abc) {
//
}这是正确的标准,还是有其他方法来实现这一点?
发布于 2017-03-17 07:53:50
protected abstract void printResults(Object abc);现在,我想用不同的参数重载相同的方法,但是我只需要对一个子类进行重载。因此,我改变了抽象方法如下,这是正确的标准,还是这有其他方法来实现这一点?
不,物体太宽了。从客户端,如果您想按接口编程,则必须调用此printResults(Object abc);。
你可以在里面放任何类型的实例。
而且我觉得你把超负荷和超负荷混为一谈。这是重载,而不是重写,因为重写不能更改声明的参数类型:
class Base{
protected abstract void printResults(Object abc);
}
...
class BaseImpl{
protected void printResults(String abc) {
...
}
}这里,BaseImpl有两个方法printResults()。
如果在BaseImpl方法中添加@重写,编译将失败,因为它不是相同的方法:
class Base{
protected abstract void printResults(Object abc);
}
...
class BaseImpl{
@Override
protected void printResults(String abc) {
...
}
}要回答您的问题,如果void printResults(String abc)特定于单个类,则只在该类中添加此方法。
在这种情况下,无法按接口编程来调用此方法,因为此方法是特定于类的。
但是,如果方法是具体的,它是可以接受的,有时甚至是可取的。
处理问题的另一种方法是使用泛型方法创建基类,根据具体的类,参数可能具有不同的类型,使用泛型:
class Base <T>{
protected abstract void printResults(T abc);
}
...
class BaseStringImpl<String>{
@Override
protected void printResults(String abc) {
...
}
}
...
class BaseIntegerImpl<Integer>{
@Override
protected void printResults(Integer abc) {
...
}
}https://stackoverflow.com/questions/42851656
复制相似问题