Javaのメソッド呼び出しに関する問題を解決しようとしていますが、これは本当に奇妙なものです。誰かが助けてくれることを願っています。ここ それは三つのクラスのコードであり、Aは、Cは、Aから継承し、I手段Iは、6を得るINT、を有するBオブジェクトのメソッドを呼び出すとDがC.クラス階層のメソッド呼び出しの演習
class A {
int f(double x) {
return 1;
}
int f(boolean x) {
return 2;
}
}
class C extends A {
int f(double x) {
return 3;
}
int f(int x) {
return 4;
}
}
class D extends C {
int f(double x) {
return 5;
}
int f(int x) {
return 6;
}
}
public class test {
public static void main(String[] args) {
C b = new D();
A d = new D();
System.out.println(b.f(33));
System.out.println(d.f(33));
}
}
継承とトップクラスでありますクラスDのメソッドf(int x)が呼び出されたことを示します。しかし、私がオブジェクトdに対して同じメソッドを呼び出すと、5が得られます。つまり、クラスDからのメソッドf(double x)が呼び出されます。それはなぜそれのように振る舞うのですか?なぜ整数は1つのケースでは整数、もう1つのケースでは2倍と見なされますか?それは私が2つのオブジェクトをどのように宣言したかに関係するものですが、私はそれを得ることができません。