Re: [問題] 觀念問題-多型和多載
※ 引述《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
討論串 (同標題文章)
java 近期熱門文章
PTT數位生活區 即時熱門文章