当前位置: 首页 > 知识库问答 >
问题:

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

米楚青
2023-03-14

我对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个答案

房子昂
2023-03-14

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

阎成天
2023-03-14

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

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

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

 类似资料:
  • 因此,从句子AA我得出结论,只有public和protected超类的方法可以被重写 ,sentenceBB也是如此 所以我搞混了两个句子之间的区别是什么?

  • 问题内容: 我正在学习Java入门课程,我们才刚刚开始学习继承。我正在完成一项任务,要求我们创建一个具有名称和年龄的“宠物”超类。和三个子类,每个子类都有自己的独特特征(我选择了“狗”,“猫”和“鸟”)。构建完所有这些之后,我们将创建一个Main类来测试所有内容,这就是我遇到问题的地方。我试图在中调用这些独特特征的方法,但似乎只能找到超类中的方法。 这是主类: 这是我的超人 这是子类之一(它们看起

  • 问题内容: 我正在研究存在的多个实现以及多个的问题。尽管共有几个需要设置的通用变量,但它们也有不同的变量,需要它们各自实现某些特定功能。为了简洁起见,我想让setter使用方法链接,例如: 和 依此类推,有几种不同的实现。从技术上讲,这可以完成我想要的一切,但是,这种方法对执行方法链接时的方法调用顺序很敏感。以下是方法未定义的编译错误: 要求开发人员考虑链中方法调用的顺序。为了避免这种情况,我想让

  • 假设我有一个抽象类Person。有另一个类学生扩展了Person。但是学生类有一个成员变量,比如String类型的学院,它在Person类中不存在。 我们知道我们可以从超类引用子类,例如, 人p=新学生(); 对象p会有成员学院吗?

  • 问题内容: 让我们看一下这段代码: 我希望这能打印出“孩子”,但结果是“父母”。为什么Java会改为调用父类,我该怎么做才能使其在子类中调用方法? 问题答案: 不会覆盖,因为它没有相同的形式参数。一个拿走,另一个拿走。因此,运行时的多态不会被应用,并且不会导致子类方法的执行。根据Java语言规范: 如果满足以下所有条件,则在类C中声明或由类C继承的实例方法从类C中 重写 另一个在类A中声明的方法: