首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >遗传协方差

遗传协方差
EN

Stack Overflow用户
提问于 2017-03-17 07:30:26
回答 1查看 443关注 0票数 1

我有一个超类SheetBuilder和许多继承这个类的子类。超类具有所有类继承的抽象方法。

代码语言:javascript
复制
protected abstract void printResults(String abc);

现在,我想用不同的参数重载相同的方法,但是我只需要对一个子类进行重载。所以我修改了下面的抽象方法,

代码语言:javascript
复制
protected abstract void printResults(Object abc);

这样我就可以用我想要接收的任何对象类型来实现我的子类,

子类impl:

代码语言:javascript
复制
protected void printResults(int abc) {
//
}

这是正确的标准,还是有其他方法来实现这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-17 07:53:50

代码语言:javascript
复制
protected abstract void printResults(Object abc);

现在,我想用不同的参数重载相同的方法,但是我只需要对一个子类进行重载。因此,我改变了抽象方法如下,这是正确的标准,还是这有其他方法来实现这一点?

不,物体太宽了。从客户端,如果您想按接口编程,则必须调用此printResults(Object abc);

你可以在里面放任何类型的实例。

而且我觉得你把超负荷和超负荷混为一谈。这是重载,而不是重写,因为重写不能更改声明的参数类型:

代码语言:javascript
复制
class Base{ 
  protected abstract void printResults(Object abc);
}
...  
class BaseImpl{
  protected void printResults(String abc) {
    ...
  }
}

这里,BaseImpl有两个方法printResults()。

如果在BaseImpl方法中添加@重写,编译将失败,因为它不是相同的方法:

代码语言:javascript
复制
class Base{ 
  protected abstract void printResults(Object abc);
}
...  
class BaseImpl{
@Override
  protected void printResults(String abc) {
    ...
  }
}

要回答您的问题,如果void printResults(String abc)特定于单个类,则只在该类中添加此方法。

在这种情况下,无法按接口编程来调用此方法,因为此方法是特定于类的。

但是,如果方法是具体的,它是可以接受的,有时甚至是可取的。

处理问题的另一种方法是使用泛型方法创建基类,根据具体的类,参数可能具有不同的类型,使用泛型:

代码语言:javascript
复制
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) {
   ...
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42851656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档