1. 程式人生 > >子函式呼叫父函式,父函式呼叫的方法,子函式重寫了,那麼最後父函式呼叫的是自己的方法,還是子函式的方法。

子函式呼叫父函式,父函式呼叫的方法,子函式重寫了,那麼最後父函式呼叫的是自己的方法,還是子函式的方法。

Q:子類呼叫父類的方法,父類中某個方法所呼叫的方法,子類也重寫了,那麼最後父類中的方法呼叫的是自己的方法,還是子類的方法。

A:呼叫的是子類的方法。

    看程式碼:

public class Parent {
    public void usedMethod(){
        say();
    }
    public void say(){
        System.out.println("this is the parent!");
    }
}
public class Child extends Parent {
    public static void main(String[]args){
        Child child=new Child();
        child.usedMethod();
    }
    public void say(){
       /*super.say();*/
        System.out.println("this is child");
    }
}

result:

    this is child!

    Process finished with exit code 0

    個人理解:

    繼承其實將父類的成員變數和成員方法拷貝到自身的記憶體空間,對於重寫的方法,就不用拷貝了。

Q:如果子類想讓父類呼叫父類的方法,而不是子類的方法,怎麼辦呢?

A:在子類的方法中顯示呼叫super.***。

看程式碼:

    

public class Child extends Parent {
    public static void main(String[]args){
        Child child=new Child();
        child.usedMethod();
    }
    public void say(){
        super.say();
       /* System.out.println("this is child");*/
    }
}


result:

    

this is the parent!

Process finished with exit code 0
父函式已經寫好了,當要重寫父函式的方法時,要注意父函式別的方法有可能會呼叫,儘量別重寫,可以採用過載。