我们如何在父代码中设置一个特定的方法调用,以便始终使用该方法的父版本,而不管子类是什么?
class Parent {
public void Method1() {
// some code
}
public void Method2() {
Method1(); // but I want to draw from PARENT Method1()
}
}
class Child extends Parent {
public void Method1() {
// some other code
}
}
public Main {
public static void main (String[] args) {
Parent obj;
obj = new Child();
obj.Method2();
obj.Method1(); // here it should use the Child Method1()
}
}
我怎样才能实现这一目标?我不知道如何用问题来搜索它(尽管付出了很多努力)
答案 0 :(得分:3)
解决此问题的一种方法是在Parent
类中创建一个私有方法,该方法在Method1
中具有您想要的功能,然后从您的Parent
方法1中调用该方法。
class Parent {
public void Method1() {
Method1Private();
}
public void Method2() {
Method1();
}
private void Method1Private() {
// some code
}
}
此方法允许您的子类在需要时覆盖Method1
,但如果需要则继承父项的行为,而父类的行为不能由子类修改。您应该考虑改为使用方法final
,因为类设计可能会变得混乱。
答案 1 :(得分:0)
你可以这样做:
Parent.this.Method1();
更新:
事实上,这是行不通的。
这是测试代码:
public class Parent {
public void Method2() {
Parent.this.Method1();
}
public void Method1() {
System.out.println("Parent.Method1()");
}
}
public class Child extends Parent {
public void Method1() {
System.out.println("Child.Method1()");
}
}
这是输出:
Child.Method1()
这应该没有标记为正确的答案。请在此处考虑其中一个答案。
答案 2 :(得分:0)
如果您不希望子类覆盖方法,请使用final
:
public final void Method1() {
// some code
}
希望永远不要使用子类的实现与不希望它们实现它一样。