0
我想解決一個Java中看起來很奇怪的方法調用問題,我希望有人可以幫忙。 這三個類的代碼,A是一個用C從A繼承和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));
}
}
繼承當我打電話對象的方法b相的int我得到6,這意味着頂部類來自類D的方法f(int x)被調用。但是當我在對象d上調用同樣的方法時,我得到5,這意味着調用類D的方法f(double x)。爲什麼它的行爲如此?爲什麼整數在一種情況下被認爲是一個整數,在另一種情況下則被認爲是一個整數?這與我如何宣佈這兩個對象有關,但我無法得到它。