【问题标题】:Android/Java: Multiple similar classes needing a super class, not sure where to startAndroid/Java:多个类似的类需要一个超类,不知道从哪里开始
【发布时间】:2016-12-30 19:39:40
【问题描述】:

假设我有 2 个类似的课程:

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";
    }
}

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

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

我的应用示例

public class main extends AppCompatActivity {
    Fruit fruit;

    ...

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

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

【问题讨论】:

  • 注意: 使用.equals(...) 方法来检查对象是否相等,使用== 来检查原始相等。 if(fruit.getFruitName == "apple") 没有做你认为的事情。
  • 请注意,Java 中没有全局变量或全局范围。您可以公开内容,但它们将与类或对象相关联。

标签: java android class subclass superclass


【解决方案1】:

你可以使用接口

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

【讨论】:

    【解决方案2】:

    您可以使用接口来定义Fruit,而不是超类:

    界面水果{ 公共字符串 getName(); 公共字符串 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();
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-14
      • 2014-02-12
      • 2014-05-25
      • 2011-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多