Re: [問題] 觀念問題-多型和多載

看板java作者 (godfat 真常)時間17年前 (2007/03/26 14:55), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串7/8 (看更多)
※ 引述《adrianshum (Alien)》之銘言: : 這只是在 Java 中的情況而已. 不要倒果為因. : 要是喜歡的話, 我在 runtime 才決定 invoke : 哪一個 overloaded 的 method 也無不可. 這我倒還是第一次聽到 overloading 能在 runtime 決定, pattern matching 嗎? http://en.wikipedia.org/wiki/Method_overloading http://en.wikipedia.org/wiki/Pattern_matching 就我所知,overloading 一般是視為靜態的多形: http://en.wikipedia.org/wiki/Type_polymorphism#Ad-hoc_polymorphism 我想你所說的 overloaded method 可在 runtime 決定大概是指: class Parent{ public void f(){} public void f(int i){} } class Child extends Parent{ public void f(){} public void f(int i){} } Parent p = getInstance(); p.f(); // 呼叫 Parent#f 或 Child#f p.f(1); // 呼叫 Parent#f(int) 或 Child#f(int) 但這能叫 overloading 嗎…? p.f() 時決定是用 f() 系列而非使用 f(int) 系列 我覺得真的要 runtime 決定 overloading 的話,應該要像是: class AClass{ public void f(1){} public void f(0){} public void f(int i){} } AClass ac = new AClass(); ac.f(1); // 呼叫 f(1) ac.f(0); // 呼叫 f(0) ac.f(2); // 呼叫 f(int) ac.f( get_a_int() ); // 呼叫誰? 不覺得這樣才有 runtime overloading 的感覺在? : 先明白什麼叫 method overloading/overriding 吧. : 不要用 "compile/runtime binding" 來判斷, 那一點 : 意思都沒有哩. : alien 其實我並不喜歡 polymorphism 這個詞,因為字面上太泛觀了。 所以所謂 overriding 我會喜歡叫 dynamic/late binding, 他明確指出 binding 是在 runtime 決定,而非 compile time. (而 overriding 則只拿來單指改寫 parent 的動作罷了, 不過改寫這個詞也是過於隨便就是了。) 我並不是想要正名或是什麼,只是越來越覺得, 如果只從 Java 的觀點去看,世界會變得很小。 也想要強調,名詞並不重要,只要不會造成混淆就好。 如果真的永遠只用 Java 的話,或許也不會有所混淆。 那繼續使用不會在 Java 混淆的名詞,似乎也無不可。 但是,其他觀點也是可以姑且聽之吧 :p -- #!/usr/bin/ruby [露比] /Programming (Kn|N)ight/ 看板《Ruby》 # if a dog nailed extra legs that http://www.ptt.cc/bbs/Ruby/index.html # walks like an octopus, and Welcome ~Ruby@ptt~ # talks like an octopus, then ◢█◣ http://www.ruby-lang.org/ # we are happy to treat it as http://www.ruby-doc.org/ # if it were an octopus. http://www.rubyforge.org/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.132.58.12
文章代碼(AID): #161svnUb (java)
討論串 (同標題文章)
文章代碼(AID): #161svnUb (java)