java - 仅当子类强制转换为父类时才调用子类的方法?

标签 java oop inheritance

假设我有一个类(class)火车,两个子类城际类和短跑运动员类,它们都是火车的类型。现在假设我想打印火车列表。当它是 Intercity 时,应打印 Intercity;当它是 sprinter 时,应打印 sprinter。

我认为这意味着我在 Intercity 和 sprinter 中创建了一个打印方法。然而,当程序通过火车列表进行迭代时,java 坚持在火车类中创建一个打印方法。

那么我该如何应对这个问题呢?我想到创建 print 方法,检查它是否是 intercity 或 sprinter 的实例,然后将其转换为相应的类型,然后调用该类型的 print 方法。

但是我想成为一名更好的程序员,这对我来说似乎不是最好的解决方案。

所以我的问题是应该如何处理上述情况?

最佳答案

您在 Train 父类(super class)中创建一个 print 方法,并在子类中重写它。这样,您就不必在打印之前检查 Train 对象的类型,并且不需要进行转换。

public class Train {

    public void print ()
    {
        // here you might have a default printing logic, or you could keep this
        // method abstract and leave the implementation to the sub-classes
    }

}

public class Sprinter extends Train {

    @Override
    public void print ()
    {

    }

}

public class InterCity extends Train {

    @Override
    public void print ()
    {

    }

}

关于java - 仅当子类强制转换为父类时才调用子类的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48484883/

相关文章:

python - 装饰器可以访问类的私有(private)成员吗?

java - 扩展类的 JMapper XML 配置

java - 在父 Activity 中初始化的类对象在子 Activity 中重新初始化

java - 设置超时时套接字不关闭

javascript - OO JS - 遍历对象数组

java - 使用public getters/setters访问同一个类中的私有(private)变量,或者直接访问变量

c++ - 在 C++ 中调用虚拟比较优先级

java - 如何覆盖 Wicket 口中特定页面的渲染策略

java - 将字符串从 Java 发送到 Arduino(简单示例)

java - 将 Java 应用程序转换为 Web 应用程序,我会从使用框架中受益吗?