2016-03-25 5 views
2

2つのクラスがあります。親クラスはメソッド - >public void abcd(int i)を持ち、子クラスはそれを上書きします - >public void abcd(Integer i)Java:親メソッドをオーバーライドできますか?パラメータは異なりますか?

親クラスと整数で使用されているのと同じメソッド名が子クラスで使用されているため、これが可能です。

は、私が実際には、この下のエラー方法のABCD()を得た

public class Practice2 extends Practice{ 
public void abcd(Integer i){ 
    System.out.println("oh child"); 
} 
public static void main(String[] args) { 
    Practice p = new Practice(); 
    Practice p2 = new Practice2(); 
    p2.abcd(1); //Is this possible 
} 

} 

Practice.java

public class Practice { 
    public void abcd(int i){ 
    System.out.println("Hi"); 
    } 

Practice2.javaは、引数(int型) int型には適用されませんと整数は同じ権利ですか?なぜ受け入れていないのですか?

+0

このような愚かな質問を申し訳ありません。私はGoogleで検索しました。適切な解決策が見つかりませんでした。 –

+0

「intとIntegerは同じです」ということはどこで知りましたか?質問を投稿する前にいくつかの調査をしてください。 –

答えて

1

エラーが発生しました。実践のabcd()メソッドは引数(int)には適用されません。intと整数は同じですか?なぜ受け入れていないのですか?

Integerintが同じではないためです。 Integerはクラス(intのWrapperクラス)です。 Javaはあなたのために自動ボクシングを解除するものとして知られているので、彼らは同じであると思われるかもしれません。

オートボクシングの例:アンボクシングの

Integer i = 5; 

例:

int num = new Integer(5); 

しかし、本質的に、彼らは別のタイプです。 1つはクラスであり、もう1つはプリミティブ型です。


私は親のメソッドをオーバーライドが異なるPARAMTERとすることはできますか?

オーバーライドの意味は、あなたが継承されたメソッドための異なる実装を書いていることを意味します。親から別のメソッドシグネチャを使用する場合親のメソッドをオーバーライドしようとしていることをJavaがどのように認識していますか?

したがって、異なるパラメータ(メソッドシグニチャ)を持つ親メソッドをオーバーライドすることはできません。あなたが別のパラメータを使用しようとすると、実際には

は、あなたが実際に(すなわち、異なるメソッドのシグネチャで同じメソッド名とメソッドを記述)をオーバーロード方法を行っています。

+0

すばらしい説明.. –

5

不可能です。

According to the Java docsは、子供が同じシグネチャ(名前、プラス数とそのパラメータのタイプ)を使用する必要があり、親メソッドをオーバーライドし、

+0

わかりました.. –

1

そのことはできないタイプ(ここでは許さ共変戻り値の型)を返すようにオーバーロードとオーバーライドを混在させ、必要な同じメソッド名、同じ引数、同じ引数型をオーバーライドしています。

1

親メソッドをオーバーライドできますが、異なるパラメータを使用できますか?

いいえ、できません。異なる実装で同じメソッドを意味するメソッドをオーバーライドする必要があります。パラメータまたは戻り型を変更した場合は、ビヘイビアを変更していることを意味します。

intと整数は同じですか?

いいえ、それらは同じではありません。整数はクラスであり、intはプリミティブ型です。詳細は答えを見てください。 here

0

んが、あなたは親のメソッドをオーバーライドしていないが、異なるパラメータを使用して、あなたはどんな親を無効にしたい場合は、あなたの宣言は同じになりますが、あなたは動作を変更することができますすることはできません。

1

子に継承されるメソッドは、親メソッドの署名のsubsignatureである必要があります。

関連する問題