为什么要覆盖超类并在函数内部再次调用它?
Why to override a superclass and call it again inside the function?
我正在阅读一段代码,它是这样完成的,我想了解它为什么这样做:
public abstract class Class2 extends Class1 {
...
@Override
public ObjectType someFunction() {
ObjectType var = super.someFunction();
....
return var;
}
}
所以someFunction()方法被覆盖了,里面又调用了parent的someFunction()。
这对你有意义吗?这样做的动机是什么?
如果你不想复制整个被覆盖方法的代码,但你想稍微改变一下逻辑或者你想添加一点代码,那么你可以调用被覆盖的方法并提供额外的代码。
这可以防止希望重写方法但保留某些行为的子类中的代码和逻辑重复。
正如 yshavit 在评论中指出的那样,调用重写方法可能是访问超类中 private
数据的唯一方法。
当您想正确使用继承时非常有用。
试想一下,你有一个 class 人,由名字和姓氏组成,你想指定工作,比如 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."
我正在阅读一段代码,它是这样完成的,我想了解它为什么这样做:
public abstract class Class2 extends Class1 {
...
@Override
public ObjectType someFunction() {
ObjectType var = super.someFunction();
....
return var;
}
}
所以someFunction()方法被覆盖了,里面又调用了parent的someFunction()。 这对你有意义吗?这样做的动机是什么?
如果你不想复制整个被覆盖方法的代码,但你想稍微改变一下逻辑或者你想添加一点代码,那么你可以调用被覆盖的方法并提供额外的代码。
这可以防止希望重写方法但保留某些行为的子类中的代码和逻辑重复。
正如 yshavit 在评论中指出的那样,调用重写方法可能是访问超类中 private
数据的唯一方法。
当您想正确使用继承时非常有用。
试想一下,你有一个 class 人,由名字和姓氏组成,你想指定工作,比如 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."