(A)b.test();-------------------------------------->編譯錯誤
((A)b).test();------------------------------------------------->正確
請問為什麼
(A)b不會先算,而要加( )才會先算呢?
uj5u.com熱心網友回復:
(A)b.test();等同于
(A)(b.test());
如果b.test()的回傳值是允許強制轉換A型別的話,則
A a = (A)b.test();
這種寫法也是沒毛病的,但是你的寫法那肯定是錯誤的。
uj5u.com熱心網友回復:
首先你b里面是沒有方法test方法,A中存在test方法對吧,而(A)b.test(); 表示的是將b.test();的回傳結果強轉為A類;而((A)b).test(); 表示的是,先將b強轉為A后去點用test方法,等同于直接用A呼叫A中的方法
uj5u.com熱心網友回復:
1、你這個test()方法肯定是A類里面,b所對應的物體類里應該是沒有的;2、括號的優先級最高,所以((A)b)就是先把b轉換為A,然后才能點出test()方法;
但是這種所謂的正確也有很大的風險,如果型別不兼容也一樣會型別轉換錯誤例外。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/49439.html
標籤:Java SE
上一篇:PHP 檔案的相關操作
下一篇:TP自動驗證密碼范圍
