Android/Java:多个相似的 classes 需要一个超级 class,不知道从哪里开始

Android/Java: Multiple similar classes needing a super class, not sure where to start

假设我有 2 个相似的 classes:

Apple.java

public class Apple {
    public string getFruitName(){
        return "apple";
    }
    public string getFruitColor(){
        return "red";
    }
}

Banana.java

public class Apple {
    public string getFruitName(){
        return "Banana";
    }
    public string getFruitColor(){
        return "yellow";
    }
}

在我的应用程序中,我需要一个全局变量,这样我就可以在任何地方动态生成一个全局范围的香蕉或苹果。 捕获的是,我不知道生成的是哪个,可能是苹果,也可能是香蕉。

猜测我需要一个超级class,也许Fruit.java,并实例化一个名为fruit的全局变量。当我调用 fruit.getFruitName 和 fruit.getFruitColor 时,我希望返回一个苹果或香蕉,以随机生成的为准。我真的不知道如何给所有这些人一个 parent class.

我的应用示例

public class main extends AppCompatActivity {
    Fruit fruit;

    ...

    public void randomFruit() {
        fruit = new Fruit();
    }

    public void sometimeLater() {
        if (fruit.getFruitName == "apple"){
            //
        }
    }
}

你可以使用接口

interface Fruit {
    String getFruitName();
    String getFruitColor();
} 

然后只为苹果和香蕉实现它

public class Apple implements Fruit {
    @Override
    public String getFruitName() {
        return "apple";
    }

    @Override
    public string getFruitColor() {
        return "red";
    }
}

然后您可以像这样将香蕉或苹果分配给 Fruit fruit

Fruit fruit = 
    ThreadLocalRandom.current().nextBoolean() ? new Apple() : new Banana();

我建议你阅读 "Inheritance" section of The Java™ Tutorials

代替超级class,您可以使用接口来定义Fruit:

界面水果{ public 字符串 getName(); public 字符串 getColor(); }

public class Apple implements Fruit {
    public string getName() { return "Apple"; }
    public string getColor() { return "Red"; }
}

public class Banana implements Fruit {
    public string getName() { return "Banana"; }
    public string getColor() { return "Yellow"; }
}

然后您可以创建一个工厂来随机生成 Fruit:

public static class FruitFarm {
    public static Fruit pick {
        return Math.random() > .5 ? new Apple() : new Banana();
    }
}

完成后,您只需调用:

Fruit = FruitFarm.pick();

获取随机水果(然后调用方法来确定您收到的是哪一个)。