以下java代碼將不會執行。爲什麼不根據數據類型調用方法,如果該值需要存儲在變量中
class A{
int sqrt(int a)
{
}
float sqrt(int a)
{
}
int a1 = sqrt(a);
float b1= sqrt(b);
}
在採訪中我被那爲什麼Java編譯器不檢查數據類型,並相應地調用該方法的一個問題地問。是什麼原因?
以下java代碼將不會執行。爲什麼不根據數據類型調用方法,如果該值需要存儲在變量中
class A{
int sqrt(int a)
{
}
float sqrt(int a)
{
}
int a1 = sqrt(a);
float b1= sqrt(b);
}
在採訪中我被那爲什麼Java編譯器不檢查數據類型,並相應地調用該方法的一個問題地問。是什麼原因?
這些方法具有相同的簽名(標識符+參數列表),這是非法的。
編譯器不允許這樣做的原因是,並不總是可以推斷出所需的數據類型。例如,Java支持原生值的「拳」爲對象,所以你應該能夠做到這一點:
ArrayList<Object> list = new ArrayList<Object>();
list.add(a.sqrt(4));
在這樣的代碼,這將是根本不可能的編譯器來找出你是否想調用返回float的方法或返回int的方法。
我問我什麼時候是編程初學者。 。讓我自己給出答案。它總是檢查方法的返回類型並相應地調用該方法。如果是
int a1 = sqrt(a);
它會調用返回類型爲整數的方法。
我認爲它的函數的多態行爲,我想(因爲我沒有在mysystem的Java設置),它會調用方法根據用戶所需的響應,因爲你需要在你的答案int詮釋 –
如果你有2個方法具有相同的名稱和相同數據類型的參數,那麼java編譯器甚至不會讓你編譯代碼。應該說,方法「sqrt」已經被定義。所以它在java中是非法的。
他怎麼樣試圖使用一個變量(可能)尚未初始化,以幫助創建自己(遞歸自引用)? –