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



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

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

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

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

最新更新