プロが教える店舗&オフィスのセキュリティ対策術

javaのオーバーライドについての質問



javaの練習問題について質問です。
継承のオーバーライドです。

class A{
protected int b(int a){ return 0;}
}

class B extends A{
//ここに入れる事ができるコードを選択肢から5個選ぶ問題
}

選択肢
1.public int b(int a) { return 0;}
2.private int b(int a) { return 0;}
3.private int b(long a) { return 0;}
4.protected long b(int a) { return 0;}
5.protected int b(long a) { return 0;}
6.protected long b(long a) { return 0;}
7.protected long b(int a,int b) { return 0;}

答えは1.3.5.6.7なのですが、3から引数の数や戻り値の型が異なり暗黙の型変換かと考えましたがlongからintは許可されていないので、どういう仕組みでコンパイルが通っているのか教えて頂きたいです。
また、アクセス修飾子や引数がオーバーライドの規定に反しているにもかかわらず正になっているのかわからないです。
当方初心者のため分かりやすく説明いただけますと幸いです。

A 回答 (1件)

オーバーライドの条件としては、戻り値・引数の型およびメソッド名が同じ必要があります。


これを満たしていない場合、オーバーロードとなる可能性があります。

1. これはオーバーライドしています〇
2. オーバーライドする際に、アクセスレベルを親クラスのものより厳しくすることはできません×
3. 引数の型が異なっているため、オーバーロードですね。コンパイルは通るので〇
4. 親メソッドと引数の型やメソッド名が同じなのに、戻り値の型が異なるため、コンパイルエラーになります×
5. 引数の型が異なっているため、オーバーロードですね。コンパイルは通るので〇
6. 引数の型が異なっているため、オーバーロードですね。コンパイルは通るので〇
7. 引数の数が異なっているため、オーバーロードですね。コンパイルは通るので〇

ですので、ちゃんとオーバーライドしているのは1番だけで、他のは新たにメソッドを作っていることになります。
    • good
    • 2
この回答へのお礼

天才やな

ありがとうございました、、!
すっきり解決しました!!
非常に分かりやすいご説明でした!
心から感謝です。

お礼日時:2020/07/12 03:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!