Re: [問題] 面試時被問到介面功能

看板java作者 ( )時間10年前 (2013/10/18 00:58), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串9/14 (看更多)
1. C++那個不叫ADL(Koenig lookup),ADL指的是當現有scope裡面找不到, 而且也不在member function裡面的時候,怎麼擴大查找*unqualified* function name 舉例來說 int main(int argc, char *argv[]){ std::cout << "hello world" << std::endl; return 0; } 這邊的"<<"不是member function,而且scope是在std底下(std::operator<<), 如果沒有ADL也沒有using std,就會查不到"<<",這時候ADL便會啟動, 根據函數參數(ostream/char*)的型別,自動擴大查找函數的scope。 那個例子只是很單純的成員查找。 2. 鑽石繼承是*已被解決*的問題,只是因為C++在繼承的時候有分virtual/non-virtual 讓事情變得很複雜很容易讓人搞混,所以一般能避則避。解決方法就是既然code有多條 路線,這時候讓compiler逼你一定要選定一條路線就好。 3. 提高一下Java比率所以提一下Scala(咦)的解決方案,Scala的trait像是Java的 interface,但是trait可以有method implementation,也可以有field。 更進一步的是,有method implementation的trait一樣可以被多重繼承。 Scala對於trait的鑽石繼承處理方式是,根據簡單的規則,自動把鑽石拆成直線。 trait A trait B extends A trait C extends A trait D extends B with C => chain super() call的code path會是D -> C -> B -> A trait E extends C with B => E -> B -> C -> A 4. method signature collision,Java的態度就是...簽名一樣就是同一個人。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 1.34.138.208 ※ 編輯: Chikei 來自: 1.34.138.208 (10/18 01:03)

10/18 07:05, , 1F
我覺得 Java 以後會朝向 Scala 的方向走
10/18 07:05, 1F
文章代碼(AID): #1IO1ShSF (java)
討論串 (同標題文章)
文章代碼(AID): #1IO1ShSF (java)