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

Java-超类和子类中的不同方法,java,android,inheritance,Java,Android,Inheritance,我对Java/Android中的继承/接口有点困惑,不确定我是否走上了正确的道路。基本上,我在Android中使用Parcelable,并且由于方法未定义而出现错误 我有一个动物超类和一些子类(狗、猫等)。在第一个活动中,您选择一只动物,然后它将其打包并传递给第二个活动: /* Second activity */ Animal myAnimal; @Override protected void onCreate(Bundle savedInstanceState) { super.

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

希望这是有意义的,任何关于我应该如何处理这一问题的建议都将不胜感激

我不希望这个方法在超类中,因为输出根据动物的类型而变化

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

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返回的类型的信息


此链接将有助于:

使用updateImage方法抽象声明动物类抽象,并在子类中实现它。您可以找到一些有用的内容

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