アウトプットができる技術者に

it's a time to take a new step !

Java 子クラスでOverrideされたメソッドは呼ばれなくなる

子クラスで親クラスのメソッドをOverrideすると、子クラスのインスタンスで、親クラスの他のメソッドからOverrideされたメソッドを呼び出した場合に、Override後のメソッドが呼び出される。

もうちょっと、端的に書くと、、
Overrideした場合、Overrideされた側は利用されなくなる。

、、まぁ、変えたいからOverrideするわけなので、当然の挙動。
とか言いつつも、不安になっていつも確認してしまう。

デザインパターンの、テンプレートメソッドって正にコレ。

public class ExTester {
    public static void main(String[] args){
        A a = new A();
        Basic b = new A();
        System.out.println("a=" + a.getALL());
        System.out.println("b=" + b.getALL());
        System.out.println("a1=" + a.getALL1());
        System.out.println("b1=" + b.getALL1());
    }
}

class A extends Basic {
    @Override
    String getType(){
        return "A";
    }
}

class Basic {
    String getType(){
        return "basic";
    }
    public String getALL(){
        return getType();
    }
    public String getALL1(){
        return this.getType();
    }
}

## result
a=A
b=A
a1=A
b1=A

ちなみに、子クラス側から親クラスのメソッドを呼び出すことは可能

Class A extends Basic {
    public getTypeS(){
       return super.getType();
    }
}