方法重写:当方法接受基类对象时传递派生类对象

时间:2015-03-09 18:20:08

标签: java methods override

我有上面的代码。如下所示,我想将派生类作为参数传递给process方法。

请建议任何替代方案。

class Fruit{
}
class Apple extends Fruit{
}

public interface Juice{
public void process(Fruit fruit);
}

Class abstract AbstractFruitManager implements Juice{
}

class FruitManager extends AbstractFruitManager{
public void process(Apple apple){ //gives compilation error...
}
}

2 个答案:

答案 0 :(得分:1)

这样做

interface Juice {  
    void process(Fruit fruit);
}

并使用 @Override

class AbstractFruitManager implements Juice{ 
    @Override   
    public void process(Fruit fruit){
    } 
}

答案 1 :(得分:1)

您不能将处理方法覆盖为

public void process(Apple apple)
正如你在FruitManager课程中所做的那样,因为它不再是Juice了。每个Juice实例必须接受其在Juice界面中承诺的过程方法中的任何Fruit。

您基本上有三种选择:

  • 重命名您的流程方法
  • 为所有水果实施您的处理方法,并为草莓等提供例外。
  • 根本没有实施Juice