java - 在父类(super class)和子类中实现同名但不同实现的方法

标签 java generics inheritance java-7

我有一个父类(super class)和子类,并且我希望能够根据是否为父类(super class)实例或子类实例调用该方法来调用该方法的特定实现。我计划有一个 if 条件来使用 Java 中的 instanceof 运算符来检查这一点。我想知道是否有其他方法(可能是泛型?)来比使用这个 if 条件更好地实现这一点 - 无论如何,这看起来并不简洁。另外,使用这种方法,当我必须将 objSuperClass 类型转换为 SubClass 类型时,我必须进行不安全的类型转换。请提出建议。

void doSomething (SuperClass obj) {
    // Works the same way for super and sub class
    int p = obj.getX1(obj);
    int q = obj.getX2(obj);

    int implementationSpecificVariable;
    // choose behavior based on the actual class
    if (obj instanceof SuperClass) {
       implementationSpecificVariable = doForSuper(obj);
    } else if (obj instanceof SubClass) {
       implementationSpecificVariable = doForSub((SubClass) obj);
    }
}

最佳答案

为此使用 OOP!

class SuperClass {
    public void doSomething() { /* implementation for SuperClass */ }
}

class SubClass extends SuperClass {
    @Override
    public void doSomething() { /* implementation for SubClass */ }
}

现在,每当您引用 SuperClassSubClass 的实例时,对其调用 doSomething 将调用第一个或第二次实现:

SuperClass obj = ...; // create instance of SuperClass or SubClass
obj.doSomething();

关于java - 在父类(super class)和子类中实现同名但不同实现的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21100051/

相关文章:

generics - 使用泛型作为集合中函数​​的参数

java - 具有显式类型构造函数的泛型类

Java 泛型 : Array Casting

java - 如何在另一个类中使用一个类的方法而不扩展

java - 具有多个私钥/公钥对的 JWT

java - 在 hibernate 中使用连接的最佳方式是什么

java - 使用 JNI 从 Java 调用 C++ 程序时出错。获取 SEGV_ACCERR

java - 在 java.io.File 中找不到构造函数 File()

Python3 - 如何从现有抽象类定义抽象子类?

java - 了解何时使用继承以及如何使用继承