java抽象类重载_在JAVA中使用一个抽象方法的重载方法
給出一個抽象類
public abstract class AbstractStomach {
public abstract void consume(Food food);
}
我想要一些具有不同重載方法的具體類:
public class FruitStomach extends AbstractStomach {
public static class Apple extends Food {}
public static class Orange extends Food {}
@Override
public void consume(Apple food) {...}
@Override
public void consume(Orange food) {...}
}
public class MeatStomach extends AbstractStomach {
public static class Beef extends Food {}
@Override
public void consume(Beef food) {...}
}
上面的代碼不起作用,因?yàn)樗仁刮以诿總€具體類中實(shí)現(xiàn)泛型消費(fèi)(Food)抽象方法.
但是我不希望具體的類實(shí)現(xiàn)消費(fèi)(食物),因?yàn)樗鼈円呀?jīng)由它們的重載變體來處理,實(shí)際上,每個具體的類應(yīng)該只消耗不同的特定食物,而不是任何食物,所以
AbstractStomach stomach = new FruitStomach();
stomach.consume(new Beef());
應(yīng)該給出錯誤.
如果我在抽象類中刪除抽象方法,那么就沒有必要讓它們擴(kuò)展抽象類,因?yàn)樗鼪]有為它們提供實(shí)現(xiàn)的指導(dǎo).
你如何修復(fù)上面的設(shè)計,以便每個具體的類可以有他們的重載方法,但他們知道有一個抽象方法consume()來實(shí)現(xiàn),但不需要實(shí)現(xiàn)consume(Food).
編輯
我可以在不使用重載的情況下解決上述問題,例如
public class FruitStomach extends AbstractStomach {
public static class Apple extends Food {}
public static class Orange extends Food {}
@Override
public void consume(Food food) {
if (food instanceof Apple) {
...
} else if (food instanceof Orange) {
...
} else {
// throws an error
}
}
}
但這不是我想要的.我想看到一個使用方法重載的解決方案.
總結(jié)
以上是生活随笔為你收集整理的java抽象类重载_在JAVA中使用一个抽象方法的重载方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HP服务器350g5怎么安装系统,HP
- 下一篇: 服务器虚拟机网卡怎么配置文件,VMWAR