【问题标题】:Java - Different methods in superclass and subclassJava - 超类和子类中的不同方法
【发布时间】:2017-10-08 05:15:09
【问题描述】:

我对 Java/Android 中的继承/接口有点困惑,不确定我是否走在正确的轨道上。基本上我在 Android 中使用 Parcelable 并且由于方法未定义而出现错误。

我有一个 Animal 超类和几个子类(Dog、cat 等)。在第一个活动中,您选择一个动物,然后将其打包并传递给第二个活动:

/* Second activity */
Animal myAnimal;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_current_status);

    Intent intent = getIntent();
    myAnimal = intent.getParcelableExtra("animal"); // Gets the animal subclass (dog, cat etc) from the previous activity
    myAnimal.updateImage(myAnimal.getCurrentState());
}

问题是'updateImage' 只存在于子类中,因此它不会在这里编译。我不希望这个方法在超类中,因为输出取决于动物的类型(例如狗的图片)。

我也不知道它会是哪种类型的动物,所以我不能将变量定义为顶部的“动物”以外的任何东西。我确实尝试将变量定义为所有子类都实现的接口,这确实使“updateImage”可用,但是在超类中没有找到方法,因为它没有实现这个特定的接口。

希望这是有道理的,任何关于我应该如何解决这个问题的建议都将不胜感激。

【问题讨论】:

  • 请添加您的父类和您的子类之一。和错误日志。

标签: java android inheritance


【解决方案1】:

我不希望这个方法在超类中,因为输出取决于动物的类型

这很好。在超类中将其定义为抽象方法,然后需要每个子类来实现。

public abstract class Animal {

    public void abstract updateImage();
}

public class Dog extends Animal {

    public void updateImage() {
        // Do dog-specific stuff here
    }
}

public class Cat extends Animal {

    public void updateImage() {
        // Do cat-specific stuff here
    }
}

注意,我没有在 updateImage 方法中添加 state 参数,因为您没有提供关于从 getCurrentState 返回的类型的信息。

此链接希望对您有所帮助:http://www.java-made-easy.com/java-inheritance.html

【讨论】:

    【解决方案2】:

    用 updateImage 方法抽象声明 Animal 类抽象并在子类中实现它。你可以找到一些有用的东西here

    【讨论】:

      猜你喜欢
      • 2019-06-29
      • 2014-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多