假设我有一个父类:
class Parent{
public void aMethod() {
//Some stuff
}
}
它是儿童班:
class Child extends Parent {
public void aMethod(int number){
//Some other stuff
}
}
现在,孩子的两种方法都有不同的参数。这会重载方法。但是我需要方法覆盖,即,如果有人试图用子类的对象调用aMethod(),那么应该调用子类的方法或者说不应该访问父类的方法。但我无法更改父类的访问修饰符,因为父类也有其他子项,他们需要原样。
那么有什么建议吗?
答案 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