前段時間面試,遇到一個很有意思的小問題,當然我肯定時回答錯了,畢竟自己還是個菜鳥,寫在寫出來和大家分享一下,很基礎的問題,卻是個不小的坑。
面試題大概時這樣的,請說出下邊代碼的輸出結果:
public static void main(String[] args) { Testfff bb = new Testfff(); short b = 7; long a = 5; bb.test1(a); bb.test1(b); } public void test1(int lin) { System.out.PRintln("int"); } public void test1(long lin) { System.out.println("long"); } public void test2(short lin) { System.out.println("short"); }A short long
B long
long
C int
long
D int
int
正確答案是c
沒錯就是c ,我發現錯的時候時我看見最后一個方法根本沒有被調用,所以不會有short的輸出,這里涉及到了基本類型之間的自動轉化,文章有很多我就不多說了。
由此,我想到了繼承類之間的向上自動轉型,很簡單,不bb,直接上代碼給大家看
public class Zd { public static void main(String[] args) { T1 t1 = new T1(); T2 t2 = new T2(); T3 t3 = new T3(); new Zd().t1(t1); new Zd().t1(t2); new Zd().t1(t3); } public void t1(T1 t1){ System.out.println("t1"); } public void t1(T2 t1){ System.out.println("t2"); } public void t1(T3 t1){ System.out.println("t3"); } }class T1{ }class T2 extends T1{ }class T3 extends T2{ }大家可以試試,將主類里的方法名改一下,使他不被調用,看看結果,這就是多態和自動類型轉換習題。菜鳥首發,練習寫博客,大神勿噴。
新聞熱點
疑難解答