1

この質問は、子 クラスの参照を親クラスの変数に格納すると、その変数を使用して両方のクラスに存在するメソッドを呼び出すという概念に基づいています。 Parent.Here子メソッドは呼び出されるべきですが、パラメータとして参照を渡すと、それは起こりません、なぜですか?メソッドは、参照として渡された参照でオーバーライドする

class Parent 
{ 
public void show() 
    { 
    System.out.println("Parent"); 
    } 
} 

class Child extends Parent 
{ 
    public void show() 
    { 
    System.out.println("Child"); 
    } 
} 

public class Call { 
    public static void main(String args[]) 
    { 
    Parent p=new Child(); 
    p.show(); 
    } 
} 

予想される出力: "子" 実際の出力: "子供を" [予想通り]

しかし、

class Parent 
{ 
public void show(Parent x) 
    { 
    System.out.println("Parent"); 
    } 
}  
class Child extends Parent 
{ 
public void show(Child x) 
    { 
    System.out.println("Child"); 
    } 
} 

public class Call { 
public static void main(String args[]) 
    { 
    Parent p=new Child(); 
    p.show(new Child()); 
    } 
} 

なぜ出力は、この場合の "親" ですか?

答えて

0

これは、2番目の例では、子がshowメソッドを完全にオーバーライドしていないためです。したがって、p.show(new Child())を呼び出すと、実際には子クラスではなく親クラスのメソッドが呼び出されます。

希望です。