如何只使用父类,即使被覆盖也是如此

时间:2014-06-14 07:27:49

标签: java inheritance

我们如何在父代码中设置一个特定的方法调用,以便始终使用该方法的父版本,而不管子类是什么?

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()

    }

}

我怎样才能实现这一目标?我不知道如何用问题来搜索它(尽管付出了很多努力)

3 个答案:

答案 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
}

希望永远不要使用子类的实现与不希望它们实现它一样。