方法覆盖不同的参数

时间:2017-08-02 12:05:15

标签: java polymorphism

假设我有一个父类:

class Parent{
    public void aMethod() {
        //Some stuff
    }
}

它是儿童班:

class Child extends Parent {
    public void aMethod(int number){
        //Some other stuff
    }
}

现在,孩子的两种方法都有不同的参数。这会重载方法。但是我需要方法覆盖,即,如果有人试图用子类的对象调用aMethod(),那么应该调用子类的方法或者说不应该访问父类的方法。但我无法更改父类的访问修饰符,因为父类也有其他子项,他们需要原样。

那么有什么建议吗?

3 个答案:

答案 0 :(得分:4)

您可以覆盖Parent类中的Child方法并抛出异常:

class Child extends Parent {
    public void aMethod(int number){
        //Some other stuff
    }

    @Override
    public void aMethod() {
        throw new UnsupportedOperationException();
    }
}

或者,如果您希望执行Child类的现有方法:

class Child extends Parent {
    public void aMethod(int number){
        //Some other stuff
    }

    @Override
    public void aMethod() {
        aMethod (someIntValue);
    }
}

Parent aMethod()的实施方式永远不会对类Child的实例执行。

答案 1 :(得分:3)

这个

void aMethod() {

和这个

void aMethod(int number)

是完全不同的方法(它们的签名不同)所以没有办法说aMethod(int number)覆盖aMethod()

那你可以做什么?:

覆盖了您可以使用的唯一方法OVERLOAD

public class Child extends Parent {

    @Override
    public void aMethod() {
        // TODDY
    }

    //here overload it
    public void aMethod(int number){
        // TODDY
    }
}

答案 2 :(得分:1)

您可以在Child类中实现export PYSPARK_PYTHON=/home/user/anaconda3/bin/python export PYSPARK_DRIVER_PYTHON=jupyter export PYSPARK_DRIVER_PYTHON_OPTS='notebook' 的版本,当您在Child类的任何实例上调用该方法时,它将被调用而不是父版本。

您不需要更改Parent的签名来覆盖该方法,因为可以覆盖公共和受保护的方法。

aMethod