Java - 超类和子类中的不同方法

时间:2017-05-09 18:38:36

标签: java android inheritance

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

我有一个动物超类,以及一些子类(狗,猫等)。在第一个活动中,您选择一只动物,然后将其包裹起来并将其传递给第二个活动:

/* 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'可用,但是它没有在超类中找到方法,因为它没有实现这个特定的接口。

希望这是有道理的,任何关于如何处理这个问题的建议都会受到高度赞赏。

2 个答案:

答案 0 :(得分:0)

  

我不希望这个方法在超类中,因为输出因动物类型而异

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

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

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

此链接有望提供帮助:http://www.java-made-easy.com/java-inheritance.html

答案 1 :(得分:0)

使用updateImage方法abstract声明Animal类摘要,并在子类中实现它。你可以找到有用的东西here