2016-04-15 5 views
-1

でこのコードの流れの背後にある内部ロジックが何であるかを説明していただけます。は、誰もが以下の継承の簡単なプログラムがされているJava

Class Base { 
    void fun() { 
    System.out.println("fun"); 
    } 
} 

Class Sub extends Base{ 
    void fun() { 
    System.out.println("In fun"); 
    } 

    void display() { 
    System.out.println ("Display"); 
    } 
} 

Base obj = new Sub(); 
obj.fun(); 
obj.display(); 

この場合、サブクラスの楽しいメソッドが呼び出されますが、表示メソッドは呼び出されず、コンパイルエラーが発生します。

+1

はどこサブクラス/スーパークラスですか?表示方法はどこですか? –

+0

あなたは 'Base'から' Sub'クラスを拡張しません。親切にそれを行うと、オラクル(https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html)それはどのように、なぜにさらに詳細に説明するようことにより、以下の説明を参照してください –

+0

、もう一度お試しください継承はJavaでこれと同じように動作します。そうであるように、この質問はあなたが尋ねる前にいくつかの研究をするという少しのモチベーションを示しています。 –

答えて

0

動的メソッドディスパッチまたはランタイムポリモフィズムと呼ばれます。

これによれば、reference variable (BaseClass b)のBaseクラスに派生クラスのobject (new ClassName();)を格納することができます。

しかしこれを実行すると、のメソッドだけがBaseクラスの独自のメソッドが呼び出されるか、子クラスのオーバーライドされたメソッドが呼び出されます。この方法子クラスの独自の方法でを呼び出すことはできません。あなたが表示法上の派生クラスの楽しい方法とエラーの出力を得る理由です

Base obj = new Sub(); 
obj.fun();    //-----------> In fun 
obj.display();   //-----------> Error 

obj = new Base(); 
obj.fun();    //-----------> fun 

これは、動的メソッドディスパッチです。

+0

実行時間の多型は楽しい方法の場合で起こったが、私は、表示方法を呼び出すことができない理由を知りたいです。 –

+0

@ Arijit.Gangulyこのメソッドは自分自身の子クラスに属しているため、基本クラスはそのメソッドについて知識がありません。それで、それはChildクラスのメソッドを呼び出すことはできません。 – gprathour

+0

@ Arijit.Gangulyあなたの質問に対する答えが得られたら、答えの左側にある右の目盛りをクリックして答えを受け入れるべきです。 – gprathour

関連する問題