2016-12-20 2 views
0

は、私たちは、親クラスと子クラスの一般的な方法testparent()を有するが、パラメータに差があるがありメソッドのオーバーライドでは、サブクラスと親クラスのパラメータ数が異なる可能性があります。

//親クラス

public class Overriding { 

    int a,b,c; 

    //Parameters are different in number 

    public void testParent(int i, int j) { 

     System.out.println(a+b); 
    } 
} 
//Child Class Extending Parent Class Method 
class ChildOverriding extends Overriding { 
     int c; 

    public void testParent(int i,int j,int k) { 

     System.out.println(a+b+c); 
    } 
    //Main Is not getting executed???? 
    public static void main(String args[]) { 
    Overriding obj = new ChildOverriding(); 
    obj.testParent(1,4,8); 
    } 
    } 
} 
+1

メソッドは**オーバーロードされました** – sidgate

+0

[Polymorphism vs Overloadingの重複の可能性](http://stackoverflow.com/questions/154577/polymorphism-vs-overriding-vs-overloading) –

答えて

0

オーバーライドで、三引数のメソッドを実装する必要があるが、サブクラスは、同じシグネチャを持つべきであることを意味します基本クラスメソッド。 パラメータと戻り値の型が同じである必要があります。

0

次の2つのメソッドを持つことができますが、その後ChildOverridingに1人があります1つをオーバーライドしないでくださいOverriding。彼らは2つの独立した方法です。

あなたのコンパイルの問題を修正するには、あなたはどちらかobjChildOverriding

ChildOverriding obj = new ChilOverriding(); 

を宣言する必要があるか、またOverriding

+0

今私はこれはシグネチャを持っているか、引数の数が子クラスと親クラスで同じでなければならないと言うことができます。 – User6

0

ここでの問題は、SuperClassの参照オブジェクトに対してSubClassからメソッドにアクセスしていることです。

もう少し説明しましょう。

Super obj = new Sub();

この行はobj名前(クラススーパーの)一つの基準変数を作成し、すべての実装の詳細をnew Sub()のスタックメモリとインスタンスでそれを格納するヒープメモリ領域に格納されます。したがって、ヒープに格納されたインスタンスのメモリアドレスは、スタックメモリに格納された参照変数にリンクされます。今

obj.someMethod()

我々は参照変数objに(someMethodなど)の任意のメソッドを呼び出すときには、スーパークラスのメソッドシグネチャを検索しますが、それはsomeMethodのインプリメンテーションを呼び出すときには、ヒープメモリ領域に格納されたインスタンスからそれを呼び出します。

これは、サブクラスが呼び出すことができるより具体的なメソッドシグネチャを持つ可能性がありますが、ヒープ領域に格納されたインスタンスが呼び出されたメソッドの実装を持たないため、スーパークラスからサブクラス(例えばSub obj = new Super();など)

スーパークラスで呼び出しているメソッドのシグネチャを見つけることができないため、プログラムがエラーを出しています。

Javaは常に、参照オブジェクトの型でのみメソッドのシグネチャを探します。

あなたの質問への回答はYes, we can have different number of parameters in subclass's method but then it won't titled as method overloading/overriding.です。オーバーロードとは新しい動作を追加することで、オーバーライドとは動作を変更することを意味します。

私の悪い英語で申し訳ありませんが、私が間違っている場合、私はJavaを学んでいるように私に知らせてください。

ありがとうございました。:)

関連する問題