如何从java中的两个不同类调用相同的方法

max*_*max 2 java oop inheritance

我有两个类AppleOrange这样:

public final  class Apple{
    int getJuice();
}
public final class Orange{
    int getJuice();
}
Run Code Online (Sandbox Code Playgroud)

我无法改变它们.我有这样的第三类fruitsManeger:

class FruitManeger {
     Apple apple;
     Orange orange;

     enum Fruits{
        Apple,Orange
     }

     Fruits favorFruits;    

     int getJoice(){
         if(favorFruits==Fruits.Apple){
               apple.getJuice();
         }else if(favorFruits==Fruits.Orange){
               orange.getJuice();
         } 
     }

}
Run Code Online (Sandbox Code Playgroud)

我的问题:在FruitManeger类中实现getJuice方法的最佳方法是什么?

正如你所看到的,如果我有很多成果,我应该添加很多if else expiration.

当然,我可以使用反射来按名称调用方法,但是当getJuice方法返回一个对象而你想要做同样的事情时,这不是一个好主意.

有没有更好的方法?

ΦXo*_*a ツ 15

有没有更好的方法?

是的,将该应用程序重写为更加明确的方式......

记住:你不能修改Apple或Orange,但OOP允许你扩展这些类,因为它们不是最终的...

class CorrectApple extends Apple implement IJuiceble{
    @Override
    int getJuice();
}
class CorrectOrange extends Orange  implement IJuiceble{
    @Override
    int getJuice();
}
Run Code Online (Sandbox Code Playgroud)

现在

interface IJuiceble{
    int getJuice();
}
Run Code Online (Sandbox Code Playgroud)

最后经理:

class FruitManeger {
     private CorrectApple apple;
     private CorrectOrange orange;

     int getJoice(IJuiceble correctfruit){
         return correctfruit.getJuice();
     }
}
Run Code Online (Sandbox Code Playgroud)

  • 你仍然可以制作一个拥有Apple的CorrectApple. (5认同)