为什么要覆盖超类并在函数内再次调用它?

时间:2015-01-28 18:06:36

标签: java oop

我正在阅读一个类似这样的代码,我想知道为什么会这样做:

public abstract class Class2 extends Class1 {
  ... 
  @Override
  public ObjectType someFunction() {
    ObjectType var = super.someFunction();
    .... 
    return var; 
  } 
} 

因此someFunction()方法已被覆盖,并且在其中再次调用parent的someFunction()。 这对你有意义吗?这样做的动机是什么?

2 个答案:

答案 0 :(得分:6)

如果您不想复制整个重写方法的代码,但是您想稍微更改一下逻辑,或者如果您想添加一些代码,那么您可以调用重写方法并提供其他代码。

这可以防止在希望覆盖方法但保留某些行为的子类中重复代码和逻辑。

正如yshavit在评论中指出的那样,调用重写方法可能是访问超类中private数据的唯一方法。

答案 1 :(得分:1)

当您想要正确使用继承时非常有用。

想象一下,你有一个由姓名和姓氏组成的类Person,你想指定这个工作,就像Farmer一样。

class Person {
    private String name;
    private String surname;

    //... Constructor

    public String getInfos() {
        return this.name + " " + this.surname;
    }
}

class Farmer extends Person {
    //... Constructor

    @Override
    public String getInfos() {
        return super.getInfos() + " is a farmer.";
    }
}


Person p1 = new Person("Name", "Surname");
System.out.println(p1.getInfos());
// Show "name surname"

Person p2 = new Farmer("Name", "Surname");
System.out.println(p2.getInfos());
// Show "name surname is a farmer."